QT不同分辨率适配问题

1,165 阅读1分钟

QT不同分辨率适配问题

由于windows存在缩放比例 ,导致若不采用缩放因子会导致高分辨率下界面过小,采用的是win32api做的适配 废话不多说 上代码

    QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling );
    QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);

    // 获取窗口当前显示的监视器

    HWND hWnd = GetDesktopWindow();//根据需要可以替换成自己程序的句柄

    HMONITOR hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);

    // 获取监视器逻辑宽度与高度

    MONITORINFOEX miex;

    miex.cbSize = sizeof(miex);

    GetMonitorInfo(hMonitor, &miex);

    int cxLogical = (miex.rcMonitor.right - miex.rcMonitor.left);

    // 获取监视器物理宽度与高度

    DEVMODE dm;

    dm.dmSize = sizeof(dm);

    dm.dmDriverExtra = 0;

    EnumDisplaySettings(miex.szDevice, ENUM_CURRENT_SETTINGS, &dm);

    int cxPhysical = dm.dmPelsWidth;

    //缩放比例计算

    double horzScale = ((double)cxPhysical / (double)cxLogical);

    qreal  cx = GetSystemMetrics(SM_CXSCREEN);

    if(cx < 1360){

        return 0;

    }

    qreal scale ;

    if(horzScale == 1){//若缩放比例为1 则直接除分辨率

        scale = cx / cxPhysical ;

    }else{

        scale = cx / 1920 ;

    }

     qputenv("QT_SCALE_FACTOR",  QString::number(scale).toLatin1( ) );