Название: Qt и Hi DPI мониторы (Retina) Отправлено: xokc от Май 22, 2016, 21:59 Стал счастливым обладателем монитора с UHD (3840х2160) разрешением. Наконец, мои глаза довольны :).
Дошли руки до своего Qt GUI софта - получил где-то вполне ожидаемые, а где-то не очень проблемы. Начнем с неожиданных: 1. Если я в приложении делаю setStyleSheet даже в варианте setStyleSheet(QString()) получаю другие размеры шрифтов, А именно вложение 1 - с примененным стилем, вложение 2 - без него. Как видно размеры шрифтов в QStatusBar разные. Хотелось бы иметь одинаковой поведение независимо от текущего DPI. 2. Высота QToolBar в дизайнере (вложение 3) не такая, как в runtime. Тут тоже хотелось бы однозначного соответствия. Ну и проблема ожидаемая: 3. Проверенные годами иконки 16х16 нечитаемы на Hi DPI. Понятно, что простое решение - использование векторной графики, но тут пока проблема с адекватными сетами. Есть ли вариант как-нибудь в рантайм подменять файлы ресурсов с иконками разного размера в зависимости от текущего DPI? Название: Re: Qt и Hi DPI мониторы (Retina) Отправлено: Racheengel от Май 22, 2016, 23:59 Не совсем понятно, как разрешение МОНИТОРА влияет на рендеринг шрифтов в ОКНЕ.
Вы как-то по хитрому пытаетесь их скалировать в зависимости от разрешения? И по поводу п.3. - ну, чем выше разрешение, тем меньше, и значит, нечитаемей будут иконки, вполне ожидаемо :) Да и все элементы гуя тоже меньше станут. Если вы замените пиксельные иконки 16х16 на векторные, они растеризируются в те же 16х16, и больше от этого не станут. Единственный вариант - увеличивать размер иконок в зависимости от текущего разрешения. Но это имхо стремно - гуй "потечет" в самых неожиданных местах. Кнопки поразлазятся и т.д. Либо собирайте 2 версии приложения - для "нормального" разрешения и для "повышенного", все равно виджеты подгонять придется... Название: Re: Qt и Hi DPI мониторы (Retina) Отправлено: xokc от Май 23, 2016, 10:02 Не совсем понятно, как разрешение МОНИТОРА влияет на рендеринг шрифтов в ОКНЕ. Ну так собственно я-то вообще ничего не делаю - "оно всё само" косячит. Абсолютно аналогичное поведение наблюдается и на стандартных примерах.Вы как-то по хитрому пытаетесь их скалировать в зависимости от разрешения? Если вы замените пиксельные иконки 16х16 на векторные, они растеризируются в те же 16х16, и больше от этого не станут. Потенциально это не проблема. Например, делаю setPixmap(QIcon("file.svg").pixmap(QSIze(16 * ratio, 16 * ratio)). Осталось правильно ratio посчитать. Но это уже другая ожидаемая проблема - к ней ещё вернусь по результатам текущих исследований.Единственный вариант - увеличивать размер иконок в зависимости от текущего разрешения. Но это имхо стремно - гуй "потечет" в самых неожиданных местах. Кнопки поразлазятся и т.д. Ну файрфокс не "течет", Qt Creator почти не течет, MSVS и офис совсем не текут, да и у меня проблемы вполне решаемые.Либо собирайте 2 версии приложения - для "нормального" разрешения и для "повышенного", все равно виджеты подгонять придется... Это уже совсем клиника будет. Разные версии для 32 и 64 бита, разных ОС, а теперь ещё и разных DPI. Смерти моей хотите? :)Название: Re: Qt и Hi DPI мониторы (Retina) Отправлено: kibsoft от Май 23, 2016, 12:07 Какая версия Qt?
Здесь читали про поддержу High DPI? http://doc.qt.io/qt-5/highdpi.html Возможно установка переменной окружения QT_AUTO_SCREEN_SCALE_FACTOR в 1 может помочь. Название: Re: Qt и Hi DPI мониторы (Retina) Отправлено: xokc от Май 23, 2016, 14:01 Какая версия Qt? Qt 5.6.0, MSVC 2013 x64, Windows 10Здесь читали про поддержу High DPI? http://doc.qt.io/qt-5/highdpi.html Безусловно и неоднократноВозможно установка переменной окружения QT_AUTO_SCREEN_SCALE_FACTOR в 1 может помочь. С этими переменными ещё, конечно поиграюсь, но первые попытки игр с ними удручают. То шрифты не масштабируются вообще, то они масштабируются дважды - сначала ОС, а потом ещё и Qt. И даже простого режима "увеличения" приложения в 2 раза у меня нормально добиться не получилось. Типа кнопки выросли в 2 раза, а шрифты остались. В общем пока статистики мало.Название: Re: Qt и Hi DPI мониторы (Retina) Отправлено: vipet от Май 23, 2016, 14:59 Qt Designer - фтопку, UI-код можно (и нужно) писать руками. Для иконок использовать QIcon - там задаются несколько изображения в разных размерах, и в зависимости от dpi указывать разные toolBar->setIconSize(QSize(..., ...)) Название: Re: Qt и Hi DPI мониторы (Retina) Отправлено: kibsoft от Май 23, 2016, 16:34 В приложении на QML(Qt 5.5.1) у меня проблема решилась установкой данной переменной окружения:
Код: qputenv("QT_DEVICE_PIXEL_RATIO", QByteArray("auto")); Проблема была только на Windows, на Mac масштабировалось все самое. Иконки все SVG. Цитировать Есть ли вариант как-нибудь в рантайм подменять файлы ресурсов с иконками разного размера в зависимости от текущего DPI? Можно, но все вручную, в зависимости от QScreen::devicePixelRatioНазвание: Re: Qt и Hi DPI мониторы (Retina) Отправлено: xokc от Май 23, 2016, 16:42 В приложении на QML(Qt 5.5.1) у меня проблема решилась установкой данной переменной окружения: This variable is deprecated in Qt 5.6.Код: qputenv("QT_DEVICE_PIXEL_RATIO", QByteArray("auto")); Можно, но все вручную, в зависимости от QScreen::devicePixelRatio Судя по http://blog.qt.io/blog/2013/04/25/retina-display-support-for-mac-os-ios-and-x11/ в iOS все решается автоматически при наличии ресурсов с суффиксом @2x. Налиличие подобного хака в винде из коробки тоже облегчило бы жизнь.Название: Re: Qt и Hi DPI мониторы (Retina) Отправлено: Racheengel от Июнь 08, 2016, 10:10 Qt Designer - фтопку Почему? :) UI-код можно (и нужно) писать руками. Зачем, если есть дизайнер ? :) Название: Re: Qt и Hi DPI мониторы (Retina) Отправлено: xokc от Февраль 05, 2017, 14:30 Одно существенное улучшение в 5.8.0 для десктопа я таки вижу. Режим масштабирования 2х по виндой теперь работает практически безупречно. "Практически" потому, что после ухода компа в сон и пробуждения, приложение (или часть его элементов, например popup menu) вдруг ставятся мелкими. Лечится разворотом в полноэкранный режим.
Название: Re: Qt и Hi DPI мониторы (Retina) Отправлено: deMax от Февраль 06, 2017, 11:14 Зачем, если есть дизайнер ? :) Я этим тоже как то переболел, вначале рисуешь в дизайне, потом когда появились динамически изменяемые элементы весь интерфейс начал создавать только через код(эффект - почувствуй себя "крутым" программистом, хотя долго и тупо).Теперь использую дизайнер для статического интерфейса и кодом шлифую если есть динамический интерфейс. |