ネイティブ・インターフェース
ネイティブ・インターフェースは、拡張するクラスのネイティブ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() からアクセス。
macOS 上の NSOpenGLContext へのネイティブインターフェース。 | |
EGLコンテキストへのネイティブインターフェース | |
GLX コンテキストへのネイティブインターフェース | |
Windows上のWGLコンテキストへのネイティブインターフェース |
QOffscreenSurface
QOffscreenSurface::nativeInterface() からアクセス。
Android のオフスクリーンサーフェスへのネイティブインターフェイス |
QSGTexture
QSGTexture::nativeInterface() からアクセス。
Direct3D 11 テクスチャオブジェクトへのアクセスを提供し、Direct3D 11 テクスチャオブジェクトの採用を可能にします。 | |
Direct3D 12テクスチャオブジェクトへのアクセスを提供し、Direct3D 12テクスチャオブジェクトの採用を可能にします。 | |
メタルテクスチャオブジェクトへのアクセスを提供し、メタルテクスチャオブジェクトの採用を可能にします。 | |
OpenGLテクスチャオブジェクトへのアクセスを提供し、OpenGLテクスチャオブジェクトの採用を可能にします。 | |
Vulkan イメージオブジェクトへのアクセスを提供し、Vulkan イメージオブジェクトの採用を可能にします。 |
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。