Qt Windows高清DPI自适应分辨率缩放,比较完美的解决方案

5 篇文章 0 订阅

我们知道,从win7系统开始,点击桌面右键,显示设置中有个缩放方案,可以缩放文本、应用的界面和文字。

如果我们选择缩放后,你会发现大部分程序可以比较完美的缩放,但是你的QT程序显示效果却和多数程序不一致,不是程序界面太大,就是文字比例不对,或者这样那样的显示问题,无论怎么调节,均感觉不正常,原因何在?

经过一番研究,结论如下:

QT这个地方真应该好好规整一下,规划设计的太乱了,开发者真的无所适从

先说最终解决方案:

让windows来接管和控制缩放,和多数程序保持一致。

如果采用QT本身的方案,显示效果比较好,但是有不少坑:比如你在代码里写死了的一些间距,就会出问题,距离不对,再比如对话框大小不对,文字太大等。

让系统接管后,输出界面会等比例放大,虽然有点模糊,但是整体视觉很棒,而且大部分程序都是这样的,我们和大部分程序保持一致就行了。

那么怎么实现呢?

其实也很简单,如下:


使用qt.conf,在资源qrc里添加

qt.conf文件内容:

为方便复制,这是文本内容:

[Platforms]
WindowsArguments = dpiawareness=0

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

在此之前,试过了多种方式,比如网上最多的: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的方案也被否决。

综上,我们采用开头说的方式,这和大部分程序的处理方式是一致的,模糊点,但是显示不会有问题。

  • 29
    点赞
  • 179
    收藏
    觉得还不错? 一键收藏
  • 39
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值