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

时间:2016-03-01 04:43:27

标签: c++ qt highdpi

我正在开发一台4k显示器并且很痛苦......

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

当您使用QT_AUTO_SCREEN_SCALE_FACTOR=1并使用radiobutton和其他基本小部件编译应用程序时,它会在4k屏幕上缩放。 否则控件的尺寸是正确的,正如预期的那样,它不是尖锐的,而是像素化的。

我在4k屏幕上运行Windows 10 Home 64bit,200%DPI变焦,使用Qt 5.6 RC msvc2015 64bit并尝试使用

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

dcreenshot

如果我使用

QGuiApplication::setAttribute(Qt::AA_DisableHighDpiScaling);

控件很清晰,文字大小正常但是所有尺寸都要小得多。

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

3 个答案:

答案 0 :(得分:3)

正如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);

答案 1 :(得分:2)

这就是为我工作的东西。您可以通过在QApplication的实例上提供命令行选项来手动设置DPIawareness。

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

根据文档,您可以将应用程序设置为DPI Unaware(它将自动缩放,但显示将变得模糊),系统DPI Aware或每个监视器的感知。

以下是用于实例化QApplication以强制High DPI,选择除1(0或2)之外的其他值以启用DPIUnaware或Per Monitor DPI Aware的最小示例代码:

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

答案 2 :(得分:1)

使用QT_AUTO_SCREEN_SCALE_FACTOR时,字体的磅值不会改变,它们只是从原始像素放大,因此它们永远不会平滑,只会更加颠簸。

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

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