c++ - Windows 10 中 Qt 桌面应用程序的不当缩放

标签 c++ qt windows-10 qtwidgets

我正在为 Windows 10 编写一个简单的 Qt(Widgets)Gui 应用程序。我正在使用 Qt 的 5.6.0 测试版。

我遇到的问题是它根本无法缩放到我的 surfacebook 屏幕:

enter image description here

这有点难说,因为 SO 缩放了图像,但请注意停靠小部件标题栏控件相对于窗口标题栏控件有多小。

This link来自 Qt 谈论缩放,但它主要关注 qml/qtQuick 和一般的移动应用程序,另外似乎暗示在桌面 QtWidgets 应用程序中,QPainter 将自动确定适当的缩放比例,这很清楚不是。

确保桌面、非 qml Qt 应用程序在高 DPI 显示器(尤其是 Windows 10)上正确缩放的最佳方法是什么?

最佳答案

Qt 最近发布了一篇关于这个问题的博文 here .

从 Qt 5.6 开始启用高 DPI 支持。在 OS X 平台上,原生支持高 DPI。在 X11/Windows/Android 上,根据博客文章,有两种方法可以启用高 DPI 检测:

  1. 设置环境变量
  2. 在程序源代码中设置一个属性

在系统环境变量中设置 QT_AUTO_SCREEN_SCALE_FACTOR=1 将解决缩放问题。

此外,在您的应用程序源代码中设置 QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 也应该允许自动高 DPI 缩放。

注意:要使用属性方法,您必须在创建QApplication 对象之前设置属性 ,也就是说:

#include <QApplication>

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

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

关于c++ - Windows 10 中 Qt 桌面应用程序的不当缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35816944/

相关文章:

c++ - 使用lambda表达式创建线程时,如何为每个线程提供自己的lambda表达式拷贝?

C++静态变量的初始化(再一次)

qt - 如何从 Qstring 中获取第一个单词

MySQL load_file() 用于 .zip 文件夹

c - 如何使 LoadLibrary 在缺少依赖项时显示错误对话框

c++ - 在构造函数中传递指向对象的指针

php - 将 Crypto++ AES 加密移植到 PHP 的 mcrypt 时 key 大小不正确

QT设计器: Connect QSlider and QDoubleSpinBox (both ways)

python - 使用 PyQt 闪烁小部件

c++ - 我无法让 SHGetFileInfo 返回图标位置