Qt Designer:如何修复屏幕尺寸差异
Qt Designer: How to fix screen size disparity
我正在 QT Creator 和 QT Designer 中开发一个程序。这是我第一次接触 QT 系列,现在我已经为此工作了大约 3 周。我必须为一项研究设计各种菜单,我被指派为此做这件事。
我正在使用 QT Designer / QT Creator built-in 拖放来制作最大的部分,然后在 运行 时间内使用代码更改一些东西(例如,一些富文本标签会在用户输入后发生变化)。我的问题是我正在处理双显示器设置。一台显示器是 1920 x 1080,另一台显示器是 3840 x 2160。当我将 运行ning 程序从 1920/1080 屏幕拖到另一台时,尺寸调整简直糟透了。 LineEdit 中的文本被截断,而且标签常常变得乱七八糟。
我在 QT Creator 中使用 "QT Widget Application" 项目作为基础,所有 UI 表单都是 .ui 文件,而不是 .qml 文件。我已经完成了大部分工作,所以我需要在解决这个问题时将所有内容都保留在 .ui 中,或者找到一种简单的方法来转换为更好的格式并解决问题。
非常奇怪的是,QT Designer 的窗体预览屏幕在两个屏幕上看起来都一样。我可以在 1920/1080 屏幕和 3840/2160 屏幕之间拖动主菜单预览,只有很小的变化。同时,QT Creator 中的 运行ning 程序在外观上存在巨大差异,具体取决于屏幕。
这里有一张图片,希望能从视觉上更好地解释它:
这只是两个打印屏幕,被裁剪以显示正在发生变化的事情之一。上半部分是 运行ning 程序,下半部分是预览,两者都在同一屏幕上以相同的屏幕尺寸(最大化)显示。我已经尝试更改设计器中各种元素的 horizontalStretch 和 verticalStretch,但它仍然很无聊。
这大概是个菜鸟问题,其实我是QT菜鸟。我只是想确保无论我们 运行 这个东西的屏幕尺寸如何,它看起来都一样。
看起来像是与 Qt 中的小部件 themes 有关的问题。
Qt Designer 使用融合样式向您显示表单预览,但是当您运行 您的程序 Qt 将select 最适合您的平台。这可以解释您看到的差异。您可以覆盖此行为以强制融合样式。
编辑:您可以尝试的另一件事是启用 Hi-DPI 屏幕渲染支持(如果尚未设置)。
只需将这一行添加到您的主要功能中,如下所示:
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication::setStyle(QStyleFactory::create("Fusion")); // these lines before the next
QApplication a(argc, argv);
您需要在顶部添加 #include <QStyleFactory>
才能使其正常工作。
对于面临相同问题并使用 PyQt 的任何人。这是解决方案。
os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
app = QtWidgets.QApplication(sys.argv)
你只需要设置一个环境变量:)
我正在 QT Creator 和 QT Designer 中开发一个程序。这是我第一次接触 QT 系列,现在我已经为此工作了大约 3 周。我必须为一项研究设计各种菜单,我被指派为此做这件事。
我正在使用 QT Designer / QT Creator built-in 拖放来制作最大的部分,然后在 运行 时间内使用代码更改一些东西(例如,一些富文本标签会在用户输入后发生变化)。我的问题是我正在处理双显示器设置。一台显示器是 1920 x 1080,另一台显示器是 3840 x 2160。当我将 运行ning 程序从 1920/1080 屏幕拖到另一台时,尺寸调整简直糟透了。 LineEdit 中的文本被截断,而且标签常常变得乱七八糟。
我在 QT Creator 中使用 "QT Widget Application" 项目作为基础,所有 UI 表单都是 .ui 文件,而不是 .qml 文件。我已经完成了大部分工作,所以我需要在解决这个问题时将所有内容都保留在 .ui 中,或者找到一种简单的方法来转换为更好的格式并解决问题。
非常奇怪的是,QT Designer 的窗体预览屏幕在两个屏幕上看起来都一样。我可以在 1920/1080 屏幕和 3840/2160 屏幕之间拖动主菜单预览,只有很小的变化。同时,QT Creator 中的 运行ning 程序在外观上存在巨大差异,具体取决于屏幕。
这里有一张图片,希望能从视觉上更好地解释它:
这只是两个打印屏幕,被裁剪以显示正在发生变化的事情之一。上半部分是 运行ning 程序,下半部分是预览,两者都在同一屏幕上以相同的屏幕尺寸(最大化)显示。我已经尝试更改设计器中各种元素的 horizontalStretch 和 verticalStretch,但它仍然很无聊。
这大概是个菜鸟问题,其实我是QT菜鸟。我只是想确保无论我们 运行 这个东西的屏幕尺寸如何,它看起来都一样。
看起来像是与 Qt 中的小部件 themes 有关的问题。
Qt Designer 使用融合样式向您显示表单预览,但是当您运行 您的程序 Qt 将select 最适合您的平台。这可以解释您看到的差异。您可以覆盖此行为以强制融合样式。
编辑:您可以尝试的另一件事是启用 Hi-DPI 屏幕渲染支持(如果尚未设置)。 只需将这一行添加到您的主要功能中,如下所示:
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication::setStyle(QStyleFactory::create("Fusion")); // these lines before the next
QApplication a(argc, argv);
您需要在顶部添加 #include <QStyleFactory>
才能使其正常工作。
对于面临相同问题并使用 PyQt 的任何人。这是解决方案。
os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
app = QtWidgets.QApplication(sys.argv)
你只需要设置一个环境变量:)