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( ) );