ネイティブ・インターフェース

ネイティブ・インターフェースは、拡張するクラスのネイティブAPIやプラットフォーム固有の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 を返します。そして、基礎となる NSOpenGLContext には、nativeContext() アクセサを通してアクセスします。

既存のネイティブハンドルの採用

ウィンドウの埋め込みと同様に、ネイティブ・プラットフォームや別のツールキットが作成したネイティブ・ハンドルを Qt に渡したい場合があります。

例えば、既存の 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();

ソースとバイナリの互換性

つまり、これらのインターフェイスを使用するアプリケーションは、開発した 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 テクスチャオブジェクトへのアクセスを提供し、Direct3D 11 テクスチャオブジェクトの採用を可能にします。

QNativeInterface::QSGD3D12Texture

Direct3D 12テクスチャオブジェクトへのアクセスを提供し、Direct3D 12テクスチャオブジェクトの採用を可能にします。

QNativeInterface::QSGMetalTexture

メタルテクスチャオブジェクトへのアクセスを提供し、メタルテクスチャオブジェクトの採用を可能にします。

QNativeInterface::QSGOpenGLTexture

OpenGLテクスチャオブジェクトへのアクセスを提供し、OpenGLテクスチャオブジェクトの採用を可能にします。

QNativeInterface::QSGVulkanTexture

Vulkanイメージオブジェクトへのアクセスを提供し、Vulkanイメージオブジェクトの採用を可能にする

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.