某些应用程序可能需要接口其它框架到 Qt。这常意味着使用由一框架与另一框架创建的图形上下文或其它类型的本机句柄。例如,在某些平台, QOpenGLContext 提供包裹现有本机 OpenGL 上下文的能力,而不是创建一个新的。可以通过一些其它第 3 方代码,创建这种现有本机上下文。
这种本机句柄类型高度特定于平台,且在某些情况下,平台插件需要更多信息以采纳句柄,仅仅句柄本身是不够的。因此,公共 API 组成函数接受或返回 QVariant 包含特定平台值类型。例如见 QOpenGLContext::setNativeHandle () 和 QOpenGLContext::nativeHandle ()。当在使用 xcb 平台插件和 GLX 窗口系统界面的 Linux/X11 上运行时,变体包含 QGLXNativeContext 。在其它平台,会使用不同的类。这些类被放在 Qt Platform Headers 模块中。
可以使用平台头结合 QGuiApplication::platformFunction () 为特定平台功能给出类型安全接口。定义头是可能的在 QtPlatformHeaders 以定义 typedef 为函数,可以返回通过平台插件从 QGuiApplication::platformFunction ()。头在 QtPlatformHeaders 还可以为函数指针实现包裹器函数,给出可以从任何上下文被调用的静态函数 (在创建平台集成后)。此模式的实现是 QXcbWindowFunctions::setWmWindowType ()。此函数检索函数指针从 QGuiApplication::platformFunction ,并执行该函数若请求函数被返回。
注意: 类似其它 QPA API,这些类没有二进制兼容性保证,意味着使用这些类的应用程序仅保证能工作于针对它开发的 Qt 版本。不像 QPA,不管怎样,源兼容性有保证。
要包括模块函数和类的定义,使用以下伪指令:
#include <QtPlatformHeaders/QWindowsWindowFunctions> #include <QtPlatformHeaders/QXcbWindowFunctions>
由于模块仅是头,因此无需进一步修改 .pro 文件就可使用它。
注意:
模块名称 (
QtPlatformHeaders
) 必须出现在
#include
指令。
注意:
没有必要将代码封闭在
#ifdef
指令从属平台。
另请参阅 QXcbWindowFunctions and QWindowsWindowFunctions .