6

根据此处的文档http://doc.qt.io/qt-5/highdpi.htmlQT 5.4+ 引入了高 DPI 支持。但是,要么我缺少一些基本的东西,要么当前的支持仍处于非常早期的阶段。我正在编写一个全新的应用程序,所以我有机会从头开始。我知道我必须使用布局而不是固定定位等,但总会有我必须指定的情况,例如控件的最小/最大尺寸。我可以在编辑器中指定它们,但这些是设备像素。因此,如果我将 Windows 设置更改为使用 150% DPI,那么编辑器中的最小值/最大值将太小。当然,我可以获取该比例并在代码中调整所有需要的值,但是如果我必须手动完成所有操作,QT 为我提供了什么样的高 DPI 支持呢?我的意思是它与 QT 5.4 之前的版本有何不同?

然后一个有趣的是 QT_DEVICE_PIXEL_RATIO 环境变量。它完全符合我的需要,它将编辑器中设置的所有像素乘以一个因子。但为什么它是环境变量而不是每个应用程序设置?为什么它只支持 2、3 等整数值,因为我们知道 Windows 有 125、150% 等设置,为什么它不能自动读取 Windows 设置并将自己设置为该值?

4

2 回答 2

3

我必须回应@Nicolas Holthaus 的回答,即启用 Qt::AA_EnableHighDpiScaling 的方式可能不是绝对正确的。因为它会舍入用户 DPI 设置。例如。Windows DPI 设置为 150%,字体和大小的结果将是 200%,而 125% 将是 100%。

正确进行 DPI 缩放的正确方法是设置环境变量QT_SCALE_FACTOR。对于同一示例,如果 DPI 设置为 150%,则设置QT_SCALE_FACTOR为 value 1.5。那么结果将是字体和大小的 150%。

查看qt官方文档http://doc.qt.io/qt-5/highdpi.html会发现

QT_SCALE_FACTOR [numeric] defines a global scale factor for the whole application, including point sized fonts.

于 2016-03-31T09:31:45.273 回答
2

从 Qt 5.6 开始,Qt 通过属性或环境变量完全支持高 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 博客的更多信息

于 2016-03-17T11:07:16.937 回答