Я разрабатываю на 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);
Если я использую
QGuiApplication::setAttribute(Qt::AA_DisableHighDpiScaling);
элементы управления четкие, размер текста в порядке, но все размеры намного меньше.
Как сделать четкие элементы управления на экране с высоким DPI?
Как сказано в документации 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);
,
С QT_AUTO_SCREEN_SCALE_FACTOR размер шрифта шрифтов не изменяется, они просто масштабируются по сравнению с исходными пикселями, поэтому они никогда не будут сглаженными, только более неровными.
Ref: http://doc.qt.io/qt-5.6/highdpi.html#high-dpi-support-in-qt
«Это не изменит размер шрифтов точечного размера»
Вместо этого вам нужно использовать QT_SCALE_FACTOR, чтобы изменить масштаб вашего приложения, а не просто изменить его пиксели.