QT高DPI支持
核心函数:
qputenv("QT_SCREEN_SCALE_FACTORS", envVar);
如:
qputenv("QT_SCREEN_SCALE_FACTORS", "1.2");
这是我个人目前用的效果最好的,可惜数值不能小于1,小于1的时候,会出问题。
需要程序启动前计算出缩放比例,然后缩放就可以了。不能使用
QGuiApplication::primaryScreen();
QT的函数来获取屏幕信息,但可以用系统API来获取,计算出缩放比例,就可以了。
下面是一些其他的缩放方式:
1.QT_SCALE_FACTOR
qputenv("QT_SCALE_FACTOR", "1.48");
非整数缩放时,界面偶尔会有一些线条出现,并不完美,且无法用:
QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Round);
来消除。
2.QT_DEVICE_PIXEL_RATIO
QT_DEVICE_PIXEL_RATIO //不推荐使用,没有设置QT_SCALE_FACTOR时生效。
3.QT_AUTO_SCREEN_SCALE_FACTOR
QT_AUTO_SCREEN_SCALE_FACTOR //缩放系数由系统(Platform)根据DPI计算,值为0或者非0值,表示开启或关闭DPI自适应,若同时设置QT_SCALE_FACTOR,最终的缩放系数为二者乘积。qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1");
4.开启高DPI缩放:
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Round);
可以自动缩放,效果也不错,但是在分辨率低的时候效果并不好。