【问题标题】:QT High DPI Support on WindowsWindows 上的 QT 高 DPI 支持
【发布时间】:2015-11-25 15:07:44
【问题描述】:

根据此处的文档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 设置并将自己设置为该值?

【问题讨论】:

标签: qt winapi dpi qtwidgets highdpi


【解决方案1】:

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

正确的 DPI 缩放方法是设置环境变量QT_SCALE_FACTOR。对于同一示例,如果 DPI 设置为 150%,则将 QT_SCALE_FACTOR 设置为值 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.

【讨论】:

    【解决方案2】:

    Qt 从 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 blog的更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 2017-06-20
      相关资源
      最近更新 更多