Spec-Zone.ru › Qt 5.6

Высокочастотные дисплеи

Высокочастотные дисплеи

Высокочастотные дисплеи — это дисплеи с повышенной плотностью пикселей по сравнению со стандартными дисплеями DPI.

Плотность пикселей измеряется в точках на дюйм (DPI) или пикселях на дюйм (PPI) и определяется количеством пикселей дисплея и его физическим размером. Это означает, что одного количества пикселей недостаточно для определения попадает ли дисплей в категорию высокочастотных.

4K-монитор имеет фиксированное количество пикселей (~8 млн), однако DPI варьируется от 185 (23 дюйма) до 110 (40 дюймов). Первый вариант примерно в 2 раза превышает стандартное разрешение рабочего стола 96 DPI, а второй — чуть больше.

Проблемы с высокочастотными дисплеями

Высокочастотные дисплеи вызывают ряд проблем для существующих приложений:

  • Приложения, использующие графические интерфейсы с фиксированными координатами, выглядят маленькими. Особенно проблематично сочетание задания размера шрифта в пунктах и других размеров в пикселях, поскольку пункты независимы от разрешения монитора. Например, рамка размером 40x20 пикселей вокруг текста «hello» со шрифтом 12 пунктов выглядит правильно на мониторах с низким разрешением, но на высокочастотных мониторах рамка будет слишком маленькой, что приведет к обрезанию текста.
  • Приложения должны адаптироваться к ситуациям, когда пользователи имеют несколько дисплеев с различным разрешением. Например, они могут использовать 4K-монитор для окна документа редактора изображений и монитор с низким разрешением для панели инструментов.

Традиционный подход к поддержке высокочастотных дисплеев заключался в автоматическом масштабировании шрифтов Qt и предоставлении значения DPI, которое код приложения мог использовать для масштабирования остальной части графического интерфейса.

Обзор поддержки высокочастотных дисплеев в Qt

Qt поддерживает режим высокочастотных дисплеев, где основная система координат виртуализирована и сделана независимой от плотности пикселей дисплея. Этот режим реализован некоторыми операционными системами (macOS, iOS). Кроме того, Qt содержит реализацию, которая может быть использована в случае отсутствия поддержки со стороны операционной системы.

Геометрия теперь задается в независимых от устройства пикселях. Это включает геометрию виджетов и элементов, геометрию событий, геометрию рабочего стола, окна и экрана, а также скорости анимации. Выводимый результат представлен в пикселях устройства, что соответствует разрешению дисплея. Соотношение между системами координат независимыми от устройства и пикселями устройства — это devicePixelRatio.

Приложения в основном работают с независимыми от устройства пикселями. Заметными исключениями являются OpenGL и код, работающий с растровой графикой.

Поддержка операционных систем

Операционные системы, поддерживаемые Qt, предлагают следующую поддержку высокочастотных дисплеев:

macOS и iOS

Платформы Apple реализуют масштабирование и виртуализацию системы координат в операционной системе. Как правило, никакая специальная настройка не требуется.

Примечание: На macOS поддержка высокочастотных дисплеев включается настройками в файле Info.plist. Убедитесь, что они присутствуют.

<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSHighResolutionCapable</key>
<string>True</string>

Более ранние версии qmake будут генерировать Info.plist с ключом NSPrincipalClass, что достаточно, поскольку NSHighResolutionCapable по умолчанию имеет значение true.

Примечание: macOS и iOS могут применять дополнительную виртуализацию, в результате чего пиксели устройства не соответствуют 1:1 пикселям дисплея. Это происходит на iPhone 6+ и на macOS с включенным масштабированием дисплея.

Microsoft Windows

Масштабирование

Пользователь может выбрать коэффициент масштабирования в панели управления или через контекстное меню. Это работает, заставляя функции для запроса системных метрик возвращать различные значения для стандартных размеров шрифтов, размеров рамок окон и т. д. Это не выполняет никакого фактического масштабирования.

DPI-осознание

Приложение в Windows может принять один из следующих уровней «DPI-осознания»:

Уровень DPI-осознания Значение
Неосознающий DPI Этот уровень был представлен в Windows Vista. Windows будет делать вид для приложения, что оно работает на стандартном дисплее 96 DPI 1920x1080 и масштабировать приложение соответственно. Он предназначен для размещения более старых приложений, разработанных для дисплеев с низким DPI. Некоторые артефакты могут возникнуть из-за этого типа масштабирования.
Осознающий DPI системы Этот уровень был представлен в Windows Vista. Он отличается от осознающего DPI каждого монитора только при подключении нескольких мониторов. Windows вычислит масштабирование, подходящее для всех подключенных мониторов.
Осознающий DPI каждого монитора Этот уровень был представлен в Windows 8.1. Windows вообще не выполняет никакого масштабирования.

Приложения Qt по умолчанию являются осознающими DPI каждого монитора в Windows 8.1 или осознающими DPI системы в более старых версиях Windows. Начиная с Qt 5.4, уровень может быть задан путем передачи параметра в плагин платформы (см. Использование qt.conf):

<application> -platform windows:dpiawareness=0,1,2

Поддержка высокочастотных дисплеев в Qt

  • Возможность предоставления пиктограмм или изображений высокого разрешения: см. Вывод изображений высокого разрешения для пиктограмм и изображений.
  • Qt 5.6 поддерживает кроссплатформенное масштабирование высокочастотных дисплеев для устаревших приложений, аналогично масштабированию, выполняемому natively macOS. Это позволяет приложениям, написанным для экранов с низким DPI, работать без изменений на устройствах с высоким DPI. Эта функция включена по умолчанию и может быть включена с помощью следующих переменных среды:
    • QT_AUTO_SCREEN_SCALE_FACTOR [boolean] включает автоматическое масштабирование на основе плотности пикселей монитора. Это не изменит размер шрифтов, заданных в пунктах, поскольку пункт — это физическая единица измерения. Для нескольких экранов могут быть заданы различные коэффициенты масштабирования.
    • QT_SCALE_FACTOR [числовое значение] определяет глобальный коэффициент масштабирования для всего приложения, включая шрифты, заданные в пунктах.
    • QT_SCREEN_SCALE_FACTORS [список] указывает коэффициенты масштабирования для каждого экрана. Это не изменит размер шрифтов, заданных в пунктах. Эта переменная среды в основном полезна для отладки или для работы с мониторами, у которых неверна информация EDID(Расширенные данные идентификации дисплея).

      Формат может быть либо список, разделенный точкой с запятой, коэффициентов масштабирования в том же порядке, что и QGuiApplication::screens(), либо список, разделенный точкой с запятой, пар name=value , где name — то же самое, что и QScreen::name().

    Хотя стиль macOS полностью поддерживает высокочастотные дисплеи, стиль рабочего стола Windows в настоящее время имеет некоторые ограничения с определенными коэффициентами масштабирования. В таких случаях рассмотрите использование стиля Fusion вместо него, который призван поддерживать высокочастотные дисплеи во всех случаях.

    Примечание: Коэффициенты масштабирования с нецелыми значениями могут привести к значительным артефактам масштабирования/рисования.

  • Атрибут приложения Qt::AA_EnableHighDpiScaling, введенный в Qt 5.6, включает автоматическое масштабирование на основе плотности пикселей монитора.
  • Атрибут приложения Qt::AA_DisableHighDpiScaling, введенный в Qt 5.6, отключает все масштабирование. Это предназначено для приложений, которым необходимо использовать фактические координаты системы окон, независимо от переменных среды. Этот атрибут имеет приоритет над Qt::AA_EnableHighDpiScaling.
  • Экспериментальная реализация масштабирования высокочастотных дисплеев была введена в Qt 5.4. Она активировалась переменной среды QT_DEVICE_PIXEL_RATIO, которая могла быть установлена в числовой коэффициент масштабирования или "auto". Эта переменная устарела в Qt 5.6.

Миграция существующих приложений

Для того, чтобы приложение, разработанное для низких значений DPI, быстро работало на мониторах высокого разрешения, рассмотрите один из вариантов масштабирования (позвольте приложению работать как не осведомлённое о DPI в Windows или установите переменную среды QT_AUTO_SCREEN_SCALE_FACTOR в "1". Хотя эти варианты могут привести к некоторым артефактам масштабирования или рисования.

В долгосрочной перспективе приложение должно быть адаптировано для работы без изменений:

  • Всегда используйте qreal-версии API рисования QPainter.
  • Устанавливайте размеры окон и диалоговых окон относительно размера экрана.
  • Заменяйте жестко заданные размеры в макетах и коде рисования вычисленными значениями из метрик шрифта или размера экрана.

Словарь терминов высокочастотных дисплеев

Термин Определение
Пиксели, независимые от устройства Пиксели, используемые приложением (пространство пользователя), подлежащие масштабированию операционной системой или Qt.
Пиксели устройства Пиксели устройства отображения.
Коэффициент пикселей устройства Коэффициент масштабирования, применяемый операционной системой или Qt.
Логическое DPI Разрешение, используемое для преобразования размеров шрифтов, определенных в пунктах, в размеры шрифтов в пикселях. Как правило, одно из стандартных значений 96, 128, .. 192.
Физическое DPI Физическое разрешение, полученное путем деления размера монитора на количество пикселей.
Дисплей Retina См. Википедия по дисплеям Retina
Пространство пользователя Пространство координат, используемое приложением (Пиксели, независимые от устройства).

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/highdpi.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API