本地接口
本地接口提供了对其扩展的类所拥有的本地或平台特定 API 的访问。
这些接口位于 QNativeInterface 命名空间中,并涵盖了诸如访问底层本地句柄、采用现有的本地句柄或提供平台特定 API 等用例。
示例用法
访问底层本地句柄
在本地平台的一些功能未在 Qt 中暴露的情况下,访问 Qt 维护的本地句柄,并使用这些句柄调用本地 API 可能会有所帮助。
例如,可以通过 QNativeInterface::QCocoaGLContext 本地接口访问 macOS 上一个 QOpenGLContext 的底层 NSOpenGLContext
using namespace QNativeInterface; if (auto *cocoaGLContext = glContext->nativeInterface<QCocoaGLContext>()) [cocoaGLContext->nativeContext() makeCurrentContext];
通过 QOpenGLContext::nativeInterface() 访问器访问本地接口,该访问器确保请求的接口可用,否则返回 nullptr
。然后通过 nativeContext() 访问器访问底层 NSOpenGLContext。
采用现有的本地句柄
类似于 窗口嵌入 用例,在一些情况下,本地平台或另一个工具包已创建的本地句柄是您希望传递给 Qt 的 – 包装现有的句柄而不是创建一个新的。
例如,通过 QNativeInterface::QCocoaGLContext 本地接口采用一个现有的 NSOpenGLContext,并使用它与 Qt 创建的上下文共享资源
using namespace QNativeInterface; QOpenGLContext *adoptedContext = QCocoaGLContext::fromNativeContext(nsOpenGLContext); anotherContext->setShareContext(adoptedContext);
采用上下文是通过 QNativeInterface::QCocoaGLContext 本地接口中的平台特定工厂函数创建的。
访问平台特定 API
在某些情况下,API 太为特定而无法包含在跨平台 Qt 类中,但仍然值得包含。这些 API 可以通过访问底层本地句柄的相同方式获取,通过 nativeInterface() 访问器,或者作为本地接口中的静态函数直接访问。
例如,从 Windows 中检索 OpenGL 模块句柄
using namespace QNativeInterface; HMODULE moduleHandle = QWGLContext::openGLModuleHandle();
源代码和二进制兼容性
对于本地接口 API 没有源代码或二进制兼容性的保证,这意味着使用这些接口的应用程序只能保证与它开发时所使用的 Qt 版本兼容。
可用的接口
有关所有可用接口的列表,请参阅 QNativeInterface 命名空间。
QOpenGLContext
通过 QOpenGLContext::nativeInterface 访问。
位于 macOS 的 NSOpenGLContext 的本地接口 | |
对 EGL 上下文的本地接口 | |
对 GLX 上下文的本地接口 | |
Windows 上 WGL 上下文的本地接口 |
QOffscreenSurface
通过 QOffscreenSurface::nativeInterface 访问。
Android 上离屏表面的本地接口 |
QSGTexture
通过 QSGTexture::nativeInterface 访问。
提供访问并允许采用 Direct3D 11 纹理对象 | |
提供访问并允许采用 Direct3D 12 纹理对象 | |
提供访问并允许采用 Metal 纹理对象 | |
提供访问并允许采用 OpenGL 纹理对象 | |
提供访问并允许采用 Vulkan 图像对象 |
© 2024 The Qt Company Ltd. 本文件中包含的文档贡献均属于其各自的版权所有者。本文件提供的文档是根据自由软件基金会发布的 GNU 自由文档许可协议第 1.3 版 许可的。Qt 及相关标志是 The Qt Company Ltd. 在芬兰和其他国家的商标。所有其他商标均为其各自所有者的财产。