Qt界面缩放由内部类QHighDpiScaling控制,应用程序可以通过设置全局变量影响Qt的整体缩放系数。
Qt中影响缩放系数的全局宏变量有:
QT_DEVICE_PIXEL_RATIO //不推荐使用,没有设置QT_SCALE_FACTOR时生效。
QT_SCALE_FACTOR //全局缩放系数,多个屏幕用统一的缩放系数
qputenv("QT_SCALE_FACTOR", "2");
QT_SCREEN_SCALE_FACTORS //设置多个屏幕的缩放系数,该参数的值采用分号";"组合的键值对表示,其中名字对应
QGuiApplication::screens()中获取的QScreen::name()值,如下为测试时两台显示器的名称。
qputenv("QT_SCREEN_SCALE_FACTORS", "\\\\.\\DISPLAY1=1;\\\\.\\DISPLAY2=2");
QT_AUTO_SCREEN_SCALE_FACTOR //缩放系数由系统(Platform)根据DPI计算,值为0或者非0值,表示开启或关闭DPI自适应,若同时设置QT_SCALE_FACTOR,最终的缩放系数为二者乘积。
qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
在Windows平台,若需要根据分辨率设置不同的界面大小,可以采用以下方式
double dScaleFactor = 1.0;
SetProcessDPIAware();
int nWidth = GetSystemMetrics(SM_CXSCREEN);
if(nWidth >= 3840)
{
dScaleFactor = 2.0;
}
qputenv("QT_SCALE_FACTOR", QString::number(dScaleFactor).toUtf8());