Spec-Zone.ru › Qt

Абстракция платформы 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
  • QWaylandIntegrationPlugin
  • QWaylandBrcmEglPlatformIntegrationPlugin
  • QWaylandEglPlatformIntegrationPlugin
  • QWaylandXCompositeEglPlatformIntegrationPlugin
  • QWaylandXCompositeGlxPlatformIntegrationPlugin
Поддержка 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

Spec-Zone.ru

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