QT在Windows下的高DPI支持

7
根据这里的文档http://doc.qt.io/qt-5/highdpi.html QT 5.4+引入了高DPI支持。然而,要么我错过了一些基础知识,要么当前的支持仍处于非常早期的阶段。我正在编写全新的应用程序,因此我有机会从头开始正确地完成它。我理解我必须使用布局而不是固定位置等,但总会有情况需要指定控件的最小/最大大小。我可以在编辑器中指定它们,但这些都是设备像素。因此,如果我更改Windows设置以使用150% DPI,则编辑器中的最小/最大值将太小。当然,我可以获取该比率并在代码中调整所有必需的值,但如果我必须手动完成所有操作,QT为我提供了什么样的高DPI支持呢?我的意思是它与QT 5.4之前有什么不同?
另一个有趣的问题是QT_DEVICE_PIXEL_RATIO环境变量。它正好满足我的需求,即通过因子乘以编辑器中设置的所有像素。但是为什么它是一个环境变量而不是每个应用程序的设置?为什么它只支持2、3等整数值,而我们知道Windows具有125、150%等设置。为什么它不能自动读取Windows设置并将自己设置为该值?

你可以在http://bugreports.qt.io/下发布此问题作为bug /建议。 - Hyndrix
你测试过PassThrough的舍入模式吗?它对我有效:https://doc.qt.io/qt-5/qt.html#HighDpiScaleFactorRoundingPolicy-enum - Leonardo Costa
2个回答

3

Qt从5.6版本开始完全支持高DPI显示器,可通过属性或环境变量进行设置(除了在原生支持的OS X上)。对于属性方法,请使用:

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support

    QApplication app(argc, argv);   
    return app.exec();
}

或者设置系统环境变量:
QT_AUTO_SCREEN_SCALE_FACTOR=1
有关更多信息,请参见Qt博客。

3
我必须回应@Nicolas Holthaus的答案,您启用Qt :: AA_EnableHighDpiScaling的方式可能并不完全正确。因为它会四舍五入用户的DPI设置。例如,Windows DPI设置为150%,结果字体和大小将为200%,而125%将为100%。
正确的DPI缩放方法是设置环境变量QT_SCALE_FACTOR。对于同样的示例,如果DPI设置为150%,则使用值1.5设置QT_SCALE_FACTOR。然后,字体和大小的结果将完全为150%。
请参见qt官方文档http://doc.qt.io/qt-5/highdpi.html,您会发现
“QT_SCALE_FACTOR [numeric]定义了整个应用程序的全局比例因子,包括点大小字体。”

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