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

注意:除了QPA API之外,Qt中还有许多其他平台抽象,例如 Qt Core 中的事件调度抽象以及在RHI中的渲染硬件抽象。QPA API主要专注于窗口系统集成和相关支持。

QPA插件

上面列出的接口的具体实现位于QPA插件(或平台插件)中,为Qt运行的所有平台增加了支持。QPA插件通过继承 QPlatform* 类来实现。

以下表格总结了可用的平台插件

插件名称插件类名称描述
qandroidQAndroidPlatformIntegrationAndroid支持
qbsdfbQBsdFbIntegrationBsdFb支持
qcocoaQCocoaIntegrationPluginmacOS支持
qdirect2dQWindowsDirect2DIntegrationPluginqwindows 插件类似,但用基于Direct2D的绘图引擎代替了光栅绘图引擎,用于 QPixmapQBackingStore
qdirectfbQDirectFbIntegrationPluginDirectFB主要集中在 表面 上,相当于 QPaintDevice
qeglfsQEglFSIntegrationPluginEGLFS 支持嵌入式Linux设备。
qhaikuQHaikuIntegrationHaiku支持
qiosQIOSIntegrationPlugin支持iOS
qlinuxfbQLinuxFb集成插件LinuxFB支持嵌入式Linux设备。
qvncQVnc集成插件VNC支持
qwayland
  • QWayland集成插件
  • QWaylandBrcmEgl平台集成插件
  • QWaylandEgl平台集成插件
  • QWaylandXCompositeEgl平台集成插件
  • QWaylandXCompositeGlx平台集成插件
Wayland支持
qwindowsQWindows集成插件Windows支持
qxcbQXcb集成插件支持X Window系统(X11)

选择一个QPA插件

Qt将根据平台选择默认的QPA插件。通过环境变量QT_QPA_PLATFORM和命令行参数-platform,您可以覆盖此默认设置。有关更多详细信息,请参阅QGuiApplication

编写一个QPA插件

目前没有详细的编写QPA插件的教程文档。但是,Qt提供了两个用于测试和其他特殊用途的示例插件,您可以以此作为参考。

  • qtbase/src/plugins/platforms/minimal/
  • qtbase/src/plugins/platforms/minimalegl/

qminimal插件用于与Qt GUI链接的工具,但不需要系统集成窗口(例如,qmlplugindump)。它还具有根据环境变量将窗口内容转储为图像文件的诊断支持。

© 2024 Qt公司。本文档中的贡献文档的版权归其各自所有者所有。本提供的文档是根据自由软件基金会发布的GNU自由文档许可协议版本1.3的条款许可的。Qt及其相关标志是芬兰及其它地区世界的Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。