Spec-Zone.ru › Qt 5.11

Высокочастотные экраны

Высокочастотные экраны

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

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

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

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

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

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

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

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

Qt поддерживает режим высокой частоты DPI, в котором основная система координат виртуализируется и делается независимой от плотности пикселей экрана. Этот режим реализован некоторыми операционными системами (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 поддерживает кроссплатформенное масштабирование для высокочастотных экранов для устаревших приложений, аналогично масштабированию, выполняемому системой macOS. Это позволяет приложениям, написанным для экранов с низкой частотой DPI, работать без изменений на устройствах с высокой частотой DPI. Эта функция включена по запросу и может быть включена с помощью следующих переменных среды:
    • QT_AUTO_SCREEN_SCALE_FACTOR [логический тип] включает автоматическое масштабирование, основанное на плотности пикселей монитора. Это не изменит размер шрифтов с фиксированным размером в пунктах, так как пункт является физической единицей измерения. Для нескольких экранов могут быть установлены разные коэффициенты масштабирования.
    • 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.
  • Устанавливайте размеры окон и диалоговых окон относительно размера экрана.
  • Замените жестко заданные размеры в макетах и коде рисования значениями, рассчитанными из метрик шрифтов или размера экрана.

Словарь терминов высокочастотного DPI

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

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

Spec-Zone.ru

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