如何使用 Qt 5.6 在高 dpi 下获得清晰的 UI?

问题描述 投票:0回答:3

我正在 4k 显示器上进行开发,这很痛苦......

最后我成功设置了QtDesigner,然后遇到了这个问题:

当您使用

QT_AUTO_SCREEN_SCALE_FACTOR=1
并使用单选按钮和其他基本小部件编译应用程序时,它看起来在 4k 屏幕上缩放。 否则,控件的尺寸是正确的,并且正如预期的那样,它只是不清晰,而是像素化。

我在 4k 屏幕上的 Windows 10 Home 64 位上运行,具有 200% DPI 缩放,使用 Qt 5.6 RC msvc2015 64 位,并尝试使用

获得相同的结果
QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

dcreenshot

如果我使用

QGuiApplication::setAttribute(Qt::AA_DisableHighDpiScaling);

控件很清晰,文字大小还可以,但所有尺寸都小得多。

如何在高 DPI 屏幕上使控件变得清晰?

c++ qt highdpi
3个回答
7
投票

正如 Qt 文档所述:

Use QT_AUTO_SCREEN_SCALE_FACTOR to enable platform plugin controlled per-screen factors.
QT_SCREEN_SCALE_FACTORS to set per-screen factors.
QT_SCALE_FACTOR to set the application global scale factor.

你可以尝试做Qt Creator正在做的事情:

static const char ENV_VAR_QT_DEVICE_PIXEL_RATIO[] = "QT_DEVICE_PIXEL_RATIO";
if (!qEnvironmentVariableIsSet(ENV_VAR_QT_DEVICE_PIXEL_RATIO)
        && !qEnvironmentVariableIsSet("QT_AUTO_SCREEN_SCALE_FACTOR")
        && !qEnvironmentVariableIsSet("QT_SCALE_FACTOR")
        && !qEnvironmentVariableIsSet("QT_SCREEN_SCALE_FACTORS")) {
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
}

最重要的是最后一行

QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);


3
投票

这对我有用。您可以通过在 QApplication 实例化时提供命令行选项来手动设置 DPIawareness。

官方文档在这里https://doc.qt.io/qt-5/highdpi.html(DPI意识部分)。

根据文档,您可以将应用程序设置为 DPI Unaware(因此它将自动缩放,但显示会模糊),或设置为 System DPI Aware 或 Per-Monitor Aware。

以下是实例化 QApplication 以强制使用高 DPI 的最小示例代码,选择 1 以外的其他值(0 或 2)以启用 DPIUnaware 或每监视器 DPI Aware:

int main() 
{
   int argc = 3;
   char*argv[] = {(char*)"Appname", (char*)"--platform", (char*)"windows:dpiawareness=1"};
   (void) new QApplication(argc, argv);
}

2
投票

使用QT_AUTO_SCREEN_SCALE_FACTOR,字体的点大小不会改变,它们只是从原始像素放大,所以它们永远不会平滑,只会更加凹凸不平。

参考:http://doc.qt.io/qt-5.6/highdpi.html#high-dpi-support-in-qt “这不会改变磅值字体的大小”

您需要使用 QT_SCALE_FACTOR 来重新缩放您的应用程序,而不仅仅是重新缩放其像素。

© www.soinside.com 2019 - 2024. All rights reserved.