本地接口

本地接口提供了对其扩展的类所拥有的本地或平台特定 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 访问。

QNativeInterface::QCocoaGLContext

位于 macOS 的 NSOpenGLContext 的本地接口

QNativeInterface::QEGLContext

对 EGL 上下文的本地接口

QNativeInterface::QGLXContext

对 GLX 上下文的本地接口

QNativeInterface::QWGLContext

Windows 上 WGL 上下文的本地接口

QOffscreenSurface

通过 QOffscreenSurface::nativeInterface 访问。

QNativeInterface::QAndroidOffscreenSurface

Android 上离屏表面的本地接口

QSGTexture

通过 QSGTexture::nativeInterface 访问。

QNativeInterface::QSGD3D11Texture

提供访问并允许采用 Direct3D 11 纹理对象

QNativeInterface::QSGD3D12Texture

提供访问并允许采用 Direct3D 12 纹理对象

QNativeInterface::QSGMetalTexture

提供访问并允许采用 Metal 纹理对象

QNativeInterface::QSGOpenGLTexture

提供访问并允许采用 OpenGL 纹理对象

QNativeInterface::QSGVulkanTexture

提供访问并允许采用 Vulkan 图像对象

© 2024 The Qt Company Ltd. 本文件中包含的文档贡献均属于其各自的版权所有者。本文件提供的文档是根据自由软件基金会发布的 GNU 自由文档许可协议第 1.3 版 许可的。Qt 及相关标志是 The Qt Company Ltd. 在芬兰和其他国家的商标。所有其他商标均为其各自所有者的财产。