【问题标题】:Qt Designer: How to fix screen size disparityQt Designer:如何修复屏幕大小差异
【发布时间】:2019-11-20 06:37:49
【问题描述】:

我正在 QT Creator 和 QT Designer 中开发一个程序。这是我第一次接触 QT 家族,我已经为此工作了大约 3 周。我必须为我被分配做这个东西的研究设计各种菜单。

我正在使用 QT Designer / QT Creator 内置的拖放功能来制作最大的部分,然后使用代码在运行时更改一些内容(例如,一些富文本标签会在用户输入后更改)。我的问题是我正在处理两个显示器的设置。一台显示器是 1920 x 1080,另一台是 3840 x 2160。当我将正在运行的程序从 1920/1080 屏幕拖到另一台时,大小简直一塌糊涂。 LineEdit 中的文本会被截断,标签通常会变得扭曲。

我在 QT Creator 中使用“QT Widget Application”项目作为基础,所有 UI 表单都是 .ui 文件,而不是 .qml 文件。我已经完成了大部分工作,因此我需要在修复此问题时将所有内容保留在 .ui 中,或者找到一种简单的方法来转换为更好的格式并解决问题。

非常奇怪的是,QT Designer 的表单预览屏幕在两个屏幕上看起来都一样。我可以在 1920/1080 屏幕和 3840/2160 屏幕之间拖动主菜单预览,并且只有很小的变化。同时QT Creator中运行的程序根据屏幕的不同在外观上有很大的差异。

这里有一张图片,希望能在视觉上更好地解释它:

这只是两个打印屏幕,被裁剪以显示正在发生变化的事物之一。上半部分是正在运行的程序,下半部分是预览,都在同一个屏幕上相同的屏幕尺寸(最大化)。我已经尝试在设计器中更改各种元素的水平拉伸和垂直拉伸,但它仍然很糟糕。

这大概是菜鸟的问题,但我其实是QT的菜鸟。我只是想确保无论我们在什么屏幕尺寸上运行这个东西,无论如何它看起来都是一样的。

【问题讨论】:

    标签: qt scaling qt-designer


    【解决方案1】:

    看起来是与 Qt 中的小部件 themes 相关的问题。

    Qt Designer 使用 fusion 样式向您显示表单预览,但是当您运行程序时,Qt 会选择最适合您的平台的匹配。这可以解释您看到的差异。您可以覆盖此行为以强制融合样式。

    编辑:您可以尝试的另一件事是启用 Hi-DPI 屏幕支持以进行渲染(如果尚未设置)。 只需将此行添加到您的 main 函数中,如下所示:

    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QApplication::setStyle(QStyleFactory::create("Fusion")); // these lines before the next
    QApplication a(argc, argv);
    

    您需要在顶部添加#include <QStyleFactory> 才能使其正常工作。

    【讨论】:

    • 这并没有解决问题。把它放在正确的位置,包含在顶部,窗口仍然在发生根本性的变化。我没有硬编码任何调整大小的处理程序或任何东西,所以我不知道是什么导致预览的行为与正在运行的程序之间存在这种差异。有什么方法可以让我尝试一对一复制预览设置?
    • 不,没有可以检查或复制的预览设置。你的 DPI 设置呢?您是否使用自定义 dpi 设置?还有你用的是什么操作系统和什么qt版本?
    • 我没有更改任何 DPI 设置。就像我说的,我刚刚开始了一个香草项目,并且一直在使用它为我设置的非常基本的设置。我正在使用 Windows 10(我认为是专业版)。我在三周前下载了 QT Creator 和 Designer 的最新版本,所以我有 Creator 4.9.1 和 Designer 5.13.0。
    • 查看我的最后一次编辑...这是我今晚的最佳猜测...希望对您有所帮助:)
    • 这确实有效,非常感谢。但是,我将澄清,样式工厂线是不必要的,至少对于我的问题。 (事实上​​,由于某种原因,它使我的一个小部件上的单选按钮消失了。)QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 行是我修复问题所需要的。你是一个救生员!
    【解决方案2】:

    对于面临相同问题并使用 PyQt 的任何人。这是解决方案。

    os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
    app = QtWidgets.QApplication(sys.argv)
    

    你只需要设置一个环境变量:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 2012-09-23
      相关资源
      最近更新 更多