Как получить четкий пользовательский интерфейс на высоких точках на дюйм с Qt 5.6?

Я разрабатываю на 4k монитора и его боль …

Наконец мне удалось настроить QtDesigner, а затем обнаружил эту проблему:

Когда вы используете QT_AUTO_SCREEN_SCALE_FACTOR=1 и скомпилировать приложение с radiobutton и другими основными виджетами, оно выглядит масштабированным на экране 4k.
В противном случае размеры элементов управления являются правильными и, как и ожидалось, просто не резкими, а скорее пиксельными.

Я работаю на Windows 10 Home 64bit на 4k экране с 200% разрешением DPI, используя Qt 5.6 RC msvc2015 64bit и пытался добиться тех же результатов, используя

QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

dcreenshot

Если я использую

QGuiApplication::setAttribute(Qt::AA_DisableHighDpiScaling);

элементы управления четкие, размер текста в порядке, но все размеры намного меньше.

Как сделать четкие элементы управления на экране с высоким DPI?

19

Решение

Как сказано в документации 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);,

2

Другие решения

С QT_AUTO_SCREEN_SCALE_FACTOR размер шрифта шрифтов не изменяется, они просто масштабируются по сравнению с исходными пикселями, поэтому они никогда не будут сглаженными, только более неровными.

Ref: http://doc.qt.io/qt-5.6/highdpi.html#high-dpi-support-in-qt
«Это не изменит размер шрифтов точечного размера»

Вместо этого вам нужно использовать QT_SCALE_FACTOR, чтобы изменить масштаб вашего приложения, а не просто изменить его пиксели.

1

По вопросам рекламы [email protected]