23

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

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

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

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

QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

截图

如果我使用

QGuiApplication::setAttribute(Qt::AA_DisableHighDpiScaling);

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

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

4

3 回答 3

6

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

于 2018-02-02T12:21:29.723 回答
2

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

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

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

于 2018-01-15T21:07:32.017 回答
2

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

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

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

这是 QApplication 实例化以强制高 DPI 的最小示例代码,选择 1(0 或 2)以外的其他值以启用 DPIUnware 或 Per Monitor DPI Aware:

int main() 
{
   int argc = 3;
   char*argv[] = {(char*)"Appname", (char*)"--platform", (char*)"windows:dpiawareness=1";
   (void) new QApplication(argc, argv);
}
于 2020-03-09T09:18:18.790 回答