Поддержка QT High DPI в Windows
В соответствии с документацией здесь http://doc.qt.io/qt-5/highdpi.html QT 5.4+ обеспечивает поддержку высокого разрешения. Однако я либо упускаю что-то фундаментальное, либо текущая поддержка все еще находится на очень ранних стадиях. Я пишу совершенно новое приложение, поэтому у меня есть шанс сделать это с нуля. Я понимаю, что мне придется использовать макеты вместо фиксированного позиционирования и т. Д., Но всегда будут случаи, когда мне придется указывать, например, минимальный / максимальный размер элемента управления. Я могу указать их в редакторе, но это пиксели устройства. Поэтому, если я изменю свои настройки Windows, чтобы использовать 150% DPI, то минимальные / максимальные значения в редакторе будут слишком маленькими. Конечно, я могу получить это соотношение и откорректировать все необходимые значения в коде, но тогда какой вид поддержки с высоким разрешением дает мне QT, если мне приходится все делать вручную? Я имею в виду, как это отличается от до QT 5.4?
Тогда интересным является переменная окружения QT_DEVICE_PIXEL_RATIO. Он делает именно то, что мне нужно, он умножает все пиксели, установленные в редакторе, на коэффициент. Но почему это переменная среды, а не настройка для приложения? Почему он поддерживает только целочисленные значения 2, 3 и т. Д., Поскольку мы знаем, что в Windows есть настройки, например 125, 150% и т. Д., И почему он не может автоматически считывать настройки Windows и устанавливать себе это значение?
2 ответа
Я должен ответить на ответ @Nicolas Holthaus, что способ включения Qt::AA_EnableHighDpiScaling может быть не совсем правильным. Так как он будет округлять настройку DPI пользователя. Например. Настройка DPI для Windows будет 150%, результат будет 200% для шрифта и размера, а 125% будет 100%.
Правильный способ сделать правильное масштабирование DPI - установить переменную окружения QT_SCALE_FACTOR
, Для того же примера, если настройка DPI составляет 150%, установите QT_SCALE_FACTOR
со значением 1.5
, Тогда результат будет ровно 150% шрифта и размера.
Смотрите официальный документ qt http://doc.qt.io/qt-5/highdpi.html и вы найдете
QT_SCALE_FACTOR [numeric] defines a global scale factor for the whole application, including point sized fonts.
Qt полностью поддерживает мониторы с высоким DPI с Qt 5.6 и далее через атрибут или переменную окружения (за исключением OS X, где поддержка является нативной). Для метода атрибута используйте:
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // DPI support
QApplication app(argc, argv);
return app.exec();
}
или установите системную переменную среды:
QT_AUTO_SCREEN_SCALE_FACTOR=1
Больше информации в блоге Qt