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

ネイティブ・インターフェースは、拡張するクラスのネイティブ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 イメージオブジェクトの採用を可能にします。

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。