High DPI scaling
От: Lexerys Украина  
Дата: 04.03.21 10:20
Оценка:
Приветствую!

Есть нативное приложение на Qt (5.6) под винду, и желание выглядеть прилично на мониторах с высоким разрешением (4k).
То есть, весь интерфейс должен выглядеть в соответствии с коэффициентом масштабирования из настроек винды.
Qt начиная с этой версии имеет встроенную поддержку масштабирования.
В итоге, есть 2 способа.

1. Не включать поддержку масштабирования Qt.
Иметь настройку размера интерфейса и строить весь гуй в пикселях, в соответствии со своей настройкой.
Задавать размеры шрифтов в пикселях, размеры контролов, окон и т.п.

2. Включить поддержку масштабирования Qt.

Перед созданием экземпляра QApplication:
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);


Работает, даже начиная с версии 5.14 починили определение scale factor в соответствии с процентами в настройках винды (пока не проверял).
На 5.6 есть проблемы с округлением: 125% = 1, 150% и выше = 2 (увеличение в 2 раза).

Однако, есть нюансы.

1. Система координат для отрисокви 3Д в QGraphicScene, нужно использовать правильные координаты, это решаемо.

2. Места, где используется Pixmap.
Например, для Drag'n'Drop нужно нарисовать кастомную картинку с текстом — после автоматического масштабирования этот текст теряет четкость.

3. QPainter::drawText внутри QGraphicScene.
Несмотря на все заверения из документации о том, что нужно использовать правильные версии методов (с qreal-аргументами), текст все равно нечеткий (такой же, как в пункте 2).
При этом в простом QWidget текст получается четкий.
Если элемент сцены рендерит svg-иконку в paint-методе, после масштабирования она тоже выглядит мутно.
Настройки атрибутов QPainter на четкость текста при масштабировании никак не влияют.

Возможно, в последней версии Qt какие-то из проблем уже решены.
Может, кто сталкивался с этими проблемами и имеет какие-то способы решения?

Спасибо!
Re: High DPI scaling
От: Igore Россия  
Дата: 04.03.21 12:49
Оценка:
Здравствуйте, Lexerys, Вы писали:

L>Работает, даже начиная с версии 5.14 починили определение scale factor в соответствии с процентами в настройках винды (пока не проверял).

L>На 5.6 есть проблемы с округлением: 125% = 1, 150% и выше = 2 (увеличение в 2 раза).

L>Возможно, в последней версии Qt какие-то из проблем уже решены.

Многие.
L>Может, кто сталкивался с этими проблемами и имеет какие-то способы решения?
О да, лучше сразу на 5.15 переходи, улучшали они с HighDpi улучшали, и где то с 5.14, 5.15 вроде более менее выглядит. Или сам маштабируй.

Кстати, ты еще попробуй с монитора 4k на обычный монитор приложение поперетаскивать. Вот тут еще можешь https://doc.qt.io/qt-5/highdpi.html почитать.
Отредактировано 04.03.2021 12:54 Igore . Предыдущая версия .
Re: High DPI scaling
От: Lexerys Украина  
Дата: 13.03.21 14:03
Оценка:
Здравствуйте, Lexerys, Вы писали:

L>Работает, даже начиная с версии 5.14 починили определение scale factor в соответствии с процентами в настройках винды (пока не проверял).

L>На 5.6 есть проблемы с округлением: 125% = 1, 150% и выше = 2 (увеличение в 2 раза).

Попробовал на 5.15.2 — действительно, гораздо лучше, шрифты и иконки масштабируются четко.
Однако, судя по всему, проблема с округлением никуда не делась, на масштабе 125% размер интерфейса остается прежним.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.