このページでは

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

ネイティブインターフェースは、それらが継承するクラスのネイティブまたはプラットフォーム固有のAPIへのアクセスを提供します。

これらのインターフェースはQNativeInterface 名前空間にあり、基盤となるネイティブハンドルへのアクセス、既存のネイティブハンドルの採用、あるいはプラットフォーム固有のAPIの提供といったユースケースを網羅しています。

使用例

基盤となるネイティブハンドルへのアクセス

Qt でネイティブプラットフォームの機能が公開されていない場合、Qt が管理するネイティブハンドルにアクセスし、それを使用してネイティブ API を呼び出すことが有用な場合があります。

たとえば、macOS 上で、QNativeInterface::QCocoaGLContext ネイティブインターフェースを介して、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();

ソースおよびバイナリの互換性

ネイティブインターフェースの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 画像オブジェクトへのアクセスを提供し、その採用を可能にします

© 2026 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.