转载自:https://blog.csdn.net/startl/article/details/105862817
QT这个地方真应该好好规整一下,规划设计的太乱了,开发者真的无所适从
先说最终解决方案:
使用资源qrc里添加,qt/etc/qt.conf, qt.conf中WindowsArguments = dpiawareness=0
好处就是直接让windows来控制,和多数程序保持一致。
如果采用QT本身的方案,显示效果比较好,但是有不少坑:比如你在代码里写死了的一些间距,就会出问题,距离不对,再比如对话框大小不对,文字太大等。
让系统接管后,输出界面会等比例放大,虽然有点模糊,但是整体视觉很棒,大部分程序都是这样的,我们和大部分程序保持一致就行了。
qt.conf文件内容:
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
在此之前,试过了多种方式,比如网上最多的:QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
或者 qputenv("QT_SCALE_FACTOR", xx)
这些方法有在QT中有一定限制,在QT程序启动后,会自动将缩放系数控制到整数倍,比如你在系统中设了125%缩放, 但QT缩放仍然是1倍,也就是没缩放;如果你设了150%缩放,QT缩放将是两倍,界面会变的超级大。
下面是缩放比例对照表
屏幕缩放比 | 程序缩放比 |
100% | 1x |
125% | 1x |
150% | 2x |
175% | 2x |
200% | 2x |
225% | 2x |
250% | 3x
|
后来查看QT 5.14的更新说明是这样的:
更新了High-DPI支持:
- 应用程序现在可以选择使用非整数比例因子,例如Windows的150%。使用QGuiApplication :: highDpiScaleFactorRoundingPolicy或QT_SCALE_FACTOR_ROUNDING_POLICY设置舍入策略。
- 添加了QT_ENABLE_HIGHDPI_SCALING环境变量,该变量可基于显示DPI进行高dpi缩放。替换QT_AUTO_SCREEN_SCALE_FACTOR(现已弃用),并且对应于Qt::AA_EnableHighDpiScaling应用程序属性。
- 现在,跨平台支持QT_FONT_DPI环境变量,以便使用特定的DPI值进行开发和测试。
OK,试试,专门安装了最新的5.14.2,使用了一下:
-
qputenv("QT_ENABLE_HIGHDPI_SCALING", "1");
-
QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
比例倒是对了,不像上面说的1.5会缩放到2倍,不过显示会有问题,比如按钮之间时不时会有虚线。
而且这种方式,在低版本的QT上面,应该可以通过qputenv("QT_AUTO_SCREEN_SCALE_FACTOR", "1.5")这样的方式也能实现。
所以,5.14的方案也被否决。
综上,我们采用开头说的方式,这和大部分程序的处理方式是一致的,模糊点,但是显示不会有问题。