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*
类来实现。
以下表格总结了可用的平台插件
插件名称 | 插件类名称 | 描述 |
---|---|---|
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 | QLinuxFb集成插件 | LinuxFB支持嵌入式Linux设备。 |
qvnc | QVnc集成插件 | VNC支持 |
qwayland |
| Wayland支持 |
qwindows | QWindows集成插件 | Windows支持 |
qxcb | QXcb集成插件 | 支持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公司有限公司的商标。所有其他商标均为其各自所有者的财产。