样式表/Qt Designer如何支持高dpi屏幕?

16
今天我将我的应用程序从Qt5.5迁移到了Qt5.6RC。在高dpi屏幕上运行它时,小部件看起来很小。阅读this后,并将QT_AUTO_SCREEN_SCALE_FACTOR设置为“1”,至少它又可以使用了。
然而他们说

从长远来看,应该使应用程序能够自适应:

1)始终使用QPainter绘图API的qreal版本。
2)根据屏幕尺寸调整窗口和对话框的大小。
3)通过从字体度量或屏幕尺寸计算出的值替换布局和绘图代码中的硬编码大小。

并非所有样式表属性都支持em(“..从字体度量”)。我不知道如何在样式表中使用与“屏幕尺寸”相关的内容。此外,Qt Designer在许多地方仅支持px,如下所示。

icon size

如果我不想放弃设计师和样式表,那么创建真正的Qt高分辨率应用程序的选择是什么?


相关(但没有回答我的问题)


有解决方案了吗?我遇到了类似的问题,考虑实施答案中提出的建议。 - abhiarora
1个回答

4
如果您真的坚持使用Designer,请考虑以编程方式更新样式表。这是我在必须在多个平台上部署的应用程序中实施的一种非常hacky的解决方法。这意味着对所有内容使用px测量,因为它是唯一被广泛支持的测量单位。
正如您所知,Qt字体不支持“屏幕大小”相关的em单位:
从Qt5文档中可以看到:https://doc.qt.io/qt-5/stylesheet-reference.html Qt仅限于使用pt和px进行字体大小设置,任何其他大小必须使用px、em或ex。
无论您使用哪种显示器及其规格来开发UI,都将成为应用程序的标准。在窗口的构造函数中,您可以计算一个比例因子,即新设备的DPI除以您知道应用程序外观良好的“标准DPI”。从那里开始,您只需要通过该比例因子乘以您的小部件/字体样式表即可。这可能听起来很麻烦(确实如此),但这意味着需要迭代ui->myWidget->getStyleSheet()返回的QString,并缩放所有紧随px子字符串之前的数字实例。
这对我在调整字体和小部件大小方面很有用,但显然会增加额外的开销。我也非常喜欢使用设计师的简单性,但据我所知,在设计师中创建可伸缩的UI仍然很困难。最终,我转而以编程方式设计UI,取代了我的应用程序中的hacky fix。
注意:还要注意你使用的字体。如果你的字体不是系统支持的字体,则px值会有意外的行为,因为默认字体将替换它。

我计划为我的应用程序实现这个。你可以给我们提供一些代码吗?现在有更好的替代方案吗? - abhiarora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接