Абстракция платформы Qt
Абстракция платформы Qt (QPA) — это основной уровень абстракции платформы в Qt.
API можно определить по префиксу класса QPlatform* и используется для реализации классов более высокого уровня, обычно встречающихся в Qt GUI, например, QPlatformWindow для интеграции с оконной системой, экспонируемой через QWindow, или QPlatformTheme для более глубокой настройки и интеграции платформы, экспонируемой через QStyleHint и QStyle.
Для классов QPA нет гарантий совместимости исходного кода или бинарных файлов, что означает, что API гарантированно работает только с версией Qt, для которой он был разработан. Однако изменения API будут внесены только в незначительных релизах. (5.1, 5.2 и т. д.)
Обзор API
- Интеграция с оконной системой
- QPlatformIntegration
- QPlatformAccessibility
- QPlatformBackingStore
- QPlatformClipboard
- QPlatformCursor
- QPlatformDrag
- QPlatformFontDatabase
- QPlatformGraphicsBuffer
- QPlatformInputContext
- QPlatformOffscreenSurface
- QPlatformOpenGLContext
- QPlatformScreen
- QPlatformServices
- QPlatformSharedGraphicsCache
- QPlatformSurface
- QPlatformWindow
- Стилизация/тема
- QPlatformTheme
- палитру платформы
- шрифты платформы
- подсказки темы
- Нативные диалоговые окна и меню
- QPlatformDialogHelper
- QPlatformMenu
- QPlatformMenuBar
- QPlatformMenuItem
Примечание: Помимо API QPA, в Qt существует множество других абстракций платформы, например, абстракции диспетчера событий в Qt Core и абстракции аппаратного ускорения рендеринга в RHI. API QPA в основном ориентированы на интеграцию с оконной системой и связанную поддержку.
Плагины QPA
Конкретные реализации перечисленных выше интерфейсов находятся в плагинах QPA или плагинах платформы, добавляя поддержку различных платформ, на которых работает Qt. Плагины QPA реализуются путем наследования классов QPlatform*.
В следующей таблице обобщены доступные плагины платформы:
| Имя плагина | Имя класса плагина | Описание |
|---|---|---|
qandroid |
QAndroidPlatformIntegration | Поддержка Android |
qbsdfb |
QBsdFbIntegration | Поддержка BsdFb |
qcocoa |
QCocoaIntegrationPlugin | Поддержка macOS |
qdirect2d |
QWindowsDirect2DIntegrationPlugin | Аналогично плагину qwindows, но заменяет движок рисования растровой графики движком рисования на основе Direct2D для QPixmap и QBackingStore. |
qdirectfb |
QDirectFbIntegrationPlugin | DirectFB сосредоточен вокруг поверхностей, которые эквивалентны QPaintDevice. |
qeglfs |
QEglFSIntegrationPlugin | Поддержка EGLFS для встраиваемых устройств Linux. |
qhaiku |
QHaikuIntegration | Поддержка Haiku |
qios |
QIOSIntegrationPlugin | Поддержка iOS |
qlinuxfb |
QLinuxFbIntegrationPlugin | Поддержка LinuxFB для встраиваемых устройств Linux. |
qmirclient |
QMirClientIntegration | Поддержка клиента Mir |
qopenwf |
QOpenWFDIntegrationPlugin | Поддержка OpenWF Display для управления аппаратным обеспечением управления отображением. |
qvnc |
QVncIntegration | Поддержка VNC |
qwayland |
|
Поддержка Wayland |
qwindows |
QWindowsIntegrationPlugin | Поддержка Windows |
qxcb |
QXcbIntegrationPlugin | Поддержка X Window System (X11) |
Написание плагина QPA
В настоящее время нет подробной документации по написанию плагинов QPA. Однако есть два минимальных плагина, поставляемых с Qt для тестирования и других специальных целей, которые вы можете использовать в качестве примеров:
qtbase/src/plugins/platforms/minimal/qtbase/src/plugins/platforms/minimalegl/
Плагин qminimal используется для инструментов, которые ссылаются на Qt GUI, но не требуют интеграции с оконной системой (например, qmlplugindump). Он также имеет поддержку диагностики для выгрузки содержимого окна в файлы изображений в соответствии с переменными окружения.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qpa.html