Russian Qt Forum
Ноябрь 24, 2024, 16:05
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Qt и Hi DPI мониторы (Retina)
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Qt и Hi DPI мониторы (Retina) (Прочитано 9252 раз)
xokc
Птица говорун
Offline
Сообщений: 976
Qt и Hi DPI мониторы (Retina)
«
:
Май 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?
«
Последнее редактирование: Май 23, 2016, 10:02 от xokc
»
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Qt и Hi DPI мониторы (Retina)
«
Ответ #1 :
Май 22, 2016, 23:59 »
Не совсем понятно, как разрешение МОНИТОРА влияет на рендеринг шрифтов в ОКНЕ.
Вы как-то по хитрому пытаетесь их скалировать в зависимости от разрешения?
И по поводу п.3. - ну, чем выше разрешение, тем меньше, и значит, нечитаемей будут иконки, вполне ожидаемо
Да и все элементы гуя тоже меньше станут.
Если вы замените пиксельные иконки 16х16 на векторные, они растеризируются в те же 16х16, и больше от этого не станут.
Единственный вариант - увеличивать размер иконок в зависимости от текущего разрешения.
Но это имхо стремно - гуй "потечет" в самых неожиданных местах. Кнопки поразлазятся и т.д.
Либо собирайте 2 версии приложения - для "нормального" разрешения и для "повышенного", все равно виджеты подгонять придется...
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
xokc
Птица говорун
Offline
Сообщений: 976
Re: Qt и Hi DPI мониторы (Retina)
«
Ответ #2 :
Май 23, 2016, 10:02 »
Цитата: Racheengel от Май 22, 2016, 23:59
Не совсем понятно, как разрешение МОНИТОРА влияет на рендеринг шрифтов в ОКНЕ.
Вы как-то по хитрому пытаетесь их скалировать в зависимости от разрешения?
Ну так собственно я-то вообще ничего не делаю - "оно всё само" косячит. Абсолютно аналогичное поведение наблюдается и на стандартных примерах.
Цитата: Racheengel от Май 22, 2016, 23:59
Если вы замените пиксельные иконки 16х16 на векторные, они растеризируются в те же 16х16, и больше от этого не станут.
Единственный вариант - увеличивать размер иконок в зависимости от текущего разрешения.
Потенциально это не проблема. Например, делаю setPixmap(QIcon("file.svg").pixmap(QSIze(16 * ratio, 16 * ratio)). Осталось правильно ratio посчитать. Но это уже другая ожидаемая проблема - к ней ещё вернусь по результатам текущих исследований.
Цитата: Racheengel от Май 22, 2016, 23:59
Но это имхо стремно - гуй "потечет" в самых неожиданных местах. Кнопки поразлазятся и т.д.
Ну файрфокс не "течет", Qt Creator почти не течет, MSVS и офис совсем не текут, да и у меня проблемы вполне решаемые.
Цитата: Racheengel от Май 22, 2016, 23:59
Либо собирайте 2 версии приложения - для "нормального" разрешения и для "повышенного", все равно виджеты подгонять придется...
Это уже совсем клиника будет. Разные версии для 32 и 64 бита, разных ОС, а теперь ещё и разных DPI. Смерти моей хотите?
Записан
kibsoft
Хакер
Offline
Сообщений: 625
Re: Qt и Hi DPI мониторы (Retina)
«
Ответ #3 :
Май 23, 2016, 12:07 »
Какая версия Qt?
Здесь читали про поддержу High DPI?
http://doc.qt.io/qt-5/highdpi.html
Возможно установка переменной окружения QT_AUTO_SCREEN_SCALE_FACTOR в 1 может помочь.
Записан
http://kibsoft.ru
- Download the Qt Media Encoding Library here
The apps that were written using QtMEL:
http://srecorder.com
- Screen recording software
xokc
Птица говорун
Offline
Сообщений: 976
Re: Qt и Hi DPI мониторы (Retina)
«
Ответ #4 :
Май 23, 2016, 14:01 »
Цитата: kibsoft от Май 23, 2016, 12:07
Какая версия Qt?
Qt 5.6.0, MSVC 2013 x64, Windows 10
Цитата: kibsoft от Май 23, 2016, 12:07
Здесь читали про поддержу High DPI?
http://doc.qt.io/qt-5/highdpi.html
Безусловно и неоднократно
Цитата: kibsoft от Май 23, 2016, 12:07
Возможно установка переменной окружения QT_AUTO_SCREEN_SCALE_FACTOR в 1 может помочь.
С этими переменными ещё, конечно поиграюсь, но первые попытки игр с ними удручают. То шрифты не масштабируются вообще, то они масштабируются дважды - сначала ОС, а потом ещё и Qt. И даже простого режима "увеличения" приложения в 2 раза у меня нормально добиться не получилось. Типа кнопки выросли в 2 раза, а шрифты остались. В общем пока статистики мало.
Записан
vipet
Бывалый
Offline
Сообщений: 452
Re: Qt и Hi DPI мониторы (Retina)
«
Ответ #5 :
Май 23, 2016, 14:59 »
Qt Designer - фтопку, UI-код можно (и нужно) писать руками.
Для иконок использовать QIcon - там задаются несколько изображения в разных размерах, и в зависимости от dpi указывать разные toolBar->setIconSize(QSize(..., ...))
Записан
kibsoft
Хакер
Offline
Сообщений: 625
Re: Qt и Hi DPI мониторы (Retina)
«
Ответ #6 :
Май 23, 2016, 16:34 »
В приложении на QML(Qt 5.5.1) у меня проблема решилась установкой данной переменной окружения:
Код:
qputenv("QT_DEVICE_PIXEL_RATIO", QByteArray("auto"));
Проблема была только на Windows, на Mac масштабировалось все самое. Иконки все SVG.
Цитировать
Есть ли вариант как-нибудь в рантайм подменять файлы ресурсов с иконками разного размера в зависимости от текущего DPI?
Можно, но все вручную, в зависимости от
QScreen::devicePixelRatio
Записан
http://kibsoft.ru
- Download the Qt Media Encoding Library here
The apps that were written using QtMEL:
http://srecorder.com
- Screen recording software
xokc
Птица говорун
Offline
Сообщений: 976
Re: Qt и Hi DPI мониторы (Retina)
«
Ответ #7 :
Май 23, 2016, 16:42 »
Цитата: kibsoft от Май 23, 2016, 16:34
В приложении на QML(Qt 5.5.1) у меня проблема решилась установкой данной переменной окружения:
Код:
qputenv("QT_DEVICE_PIXEL_RATIO", QByteArray("auto"));
This variable is deprecated in Qt 5.6.
Цитата: kibsoft от Май 23, 2016, 16:34
Можно, но все вручную, в зависимости от
QScreen::devicePixelRatio
Судя по
http://blog.qt.io/blog/2013/04/25/retina-display-support-for-mac-os-ios-and-x11/
в iOS все решается автоматически при наличии ресурсов с суффиксом @2x. Налиличие подобного хака в винде из коробки тоже облегчило бы жизнь.
«
Последнее редактирование: Май 23, 2016, 20:44 от xokc
»
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Qt и Hi DPI мониторы (Retina)
«
Ответ #8 :
Июнь 08, 2016, 10:10 »
Цитата: vipet от Май 23, 2016, 14:59
Qt Designer - фтопку
Почему?
Цитата: vipet от Май 23, 2016, 14:59
UI-код можно (и нужно) писать руками.
Зачем, если есть дизайнер ?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
xokc
Птица говорун
Offline
Сообщений: 976
Re: Qt и Hi DPI мониторы (Retina)
«
Ответ #9 :
Февраль 05, 2017, 14:30 »
Одно существенное улучшение в 5.8.0 для десктопа я таки вижу. Режим масштабирования 2х по виндой теперь работает практически безупречно. "Практически" потому, что после ухода компа в сон и пробуждения, приложение (или часть его элементов, например popup menu) вдруг ставятся мелкими. Лечится разворотом в полноэкранный режим.
Записан
deMax
Хакер
Offline
Сообщений: 600
Re: Qt и Hi DPI мониторы (Retina)
«
Ответ #10 :
Февраль 06, 2017, 11:14 »
Цитата: Racheengel от Июнь 08, 2016, 10:10
Зачем, если есть дизайнер ?
Я этим тоже как то переболел, вначале рисуешь в дизайне, потом когда появились динамически изменяемые элементы весь интерфейс начал создавать только через код(эффект - почувствуй себя "крутым" программистом, хотя долго и тупо).
Теперь использую дизайнер для статического интерфейса и кодом шлифую если есть динамический интерфейс.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...