本机接口

本机接口提供对其扩展类的本机或特定平台 API 的访问。

The interfaces live in the QNativeInterface namespace, and cover use-cases such as accessing underlying native handles, adopting existing native handles, or providing platform specific APIs.

用法范例

访问底层本机句柄

In situations where a feature of the native platform is not exposed in Qt, it can be helpful to access the native handles maintained by Qt, and use those to call the native APIs instead.

For example, to access the underlying NSOpenGLContext of an QOpenGLContext on macOS, via the QNativeInterface::QCocoaGLContext 本机接口:

using namespace QNativeInterface;
if (auto *cocoaGLContext = glContext->nativeInterface<QCocoaGLContext>())
    [cocoaGLContext->nativeContext() makeCurrentContext];
					

本机接口的访问透过 QOpenGLContext::nativeInterface () accessor, which ensures that the requested interface is available, and otherwise returns nullptr . The underlying NSOpenGLContext is then accessed through the nativeContext () accessor.

采纳现有本机句柄

类似于 窗口嵌入 use-case, there are situations where the native platform, or another toolkit, has created a native handle that you would like to pass on to Qt — wrapping the existing handle instead of creating a new one.

For example, to adopt an existing NSOpenGLContext, and use that to share resources with a context created by Qt:

using namespace QNativeInterface;
QOpenGLContext *adoptedContext = QCocoaGLContext::fromNativeContext(nsOpenGLContext);
anotherContext->setShareContext(adoptedContext);
					

The adopted context is created by a platform specific factory function in the QNativeInterface::QCocoaGLContext native interface.

访问平台特定 API

In some cases an API is too platform specific to be included in the cross platform Qt classes, but is still useful to include. These APIs are available either in the same way as when accessing the underlying native handles, through the nativeInterface () accessor, or directly as static function in the native interface.

例如,要在 Windows 取出 OpenGL 模块句柄:

using namespace QNativeInterface;
HMODULE moduleHandle = QWGLContext::openGLModuleHandle();
					

源代码和二进制兼容性

本机 API 接口没有源代码或二进制兼容性保证,意味着使用这些接口的应用程序仅保证与针对它开发的 Qt 版本能一起工作。

可用接口

有关所有可用接口的列表,见 QNativeInterface 名称空间。

QOpenGLContext

访问透过 QOpenGLContext::nativeInterface ().

QNativeInterface::QCocoaGLContext

在 macOS 的 NSOpenGLContext 的本机接口

QNativeInterface::QEGLContext

ELX 上下文的本机接口

QNativeInterface::QGLXContext

GLX 上下文的本机接口

QNativeInterface::QWGLContext

Windows WGL 上下文的本机接口

QOffscreenSurface

访问透过 QOffscreenSurface::nativeInterface ().

QNativeInterface::QAndroidOffscreenSurface

在 Android 的离屏表面的本机界面

QSGTexture

访问透过 QSGTexture::nativeInterface ().

QNativeInterface::QSGD3D11Texture

提供对 Direct3D 11 纹理对象的访问和启用采纳

QNativeInterface::QSGD3D12Texture

Provides access to and enables adopting Direct3D 12 texture objects

QNativeInterface::QSGMetalTexture

提供对 Metal 纹理对象的访问和启用采纳

QNativeInterface::QSGOpenGLTexture

提供对 OpenGL 纹理对象的访问和启用采纳

QNativeInterface::QSGVulkanTexture

提供对 Vulkan 图像对象的访问和启用采纳