Sur cette page

Interfaces natives

Les interfaces natives permettent d'accéder aux API natives ou spécifiques à la plate-forme des classes qu'elles étendent.

Les interfaces se trouvent dans l'espace de noms QNativeInterface et couvrent des cas d'utilisation tels que l'accès aux poignées natives sous-jacentes, l'adoption de poignées natives existantes ou la fourniture d'API spécifiques à une plateforme.

Exemple d'utilisation

Accès aux handles natifs sous-jacents

Dans les situations où une fonctionnalité de la plateforme native n'est pas exposée dans Qt Help, il peut être utile d'accéder aux handles natifs maintenus par Qt Help et de les utiliser pour appeler les API natives à la place.

Par exemple, pour accéder au NSOpenGLContext sous-jacent d'un QOpenGLContext sur macOS, via l'interface native QNativeInterface::QCocoaGLContext:

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

L'interface native est accessible via l'accesseur QOpenGLContext::nativeInterface(), qui s'assure que l'interface demandée est disponible, et renvoie sinon nullptr. Le NSOpenGLContext sous-jacent est alors accessible via l'accesseur nativeContext().

Adoption de poignées natives existantes

De la même manière que pour l'intégration de fenêtres, il existe des situations où la plateforme native, ou une autre boîte à outils, a créé une poignée native que vous souhaitez transmettre à Qt - en enveloppant la poignée existante au lieu d'en créer une nouvelle.

Par exemple, pour adopter un contexte NSOpenGLC existant et l'utiliser pour partager des ressources avec un contexte créé par Qt :

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

Le contexte adopté est créé par une fonction d'usine spécifique à la plate-forme dans l'interface native QNativeInterface::QCocoaGLContext.

Accès aux API spécifiques à une plate-forme

Dans certains cas, une API est trop spécifique à une plate-forme pour être incluse dans les classes Qt multiplateformes, mais il est toujours utile de l'inclure. Ces API sont disponibles soit de la même manière que lors de l'accès aux poignées natives sous-jacentes, via l'accesseur nativeInterface(), soit directement en tant que fonction statique dans l'interface native.

Par exemple, pour extraire la poignée du module OpenGL sous Windows :

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

Compatibilité source et binaire

Il n'y a pas de garantie de compatibilité source ou binaire pour les API des interfaces natives, ce qui signifie qu'une application utilisant ces interfaces n'est garantie de fonctionner qu'avec la version de Qt avec laquelle elle a été développée.

Interfaces disponibles

Pour une liste de toutes les interfaces disponibles, voir l'espace de noms QNativeInterface.

QOpenGLContext

Accessible via QOpenGLContext::nativeInterface().

QNativeInterface::QCocoaGLContext

Interface native d'un NSOpenGLContext sur macOS

QNativeInterface::QEGLContext

Interface native avec un contexte EGL

QNativeInterface::QGLXContext

Interface native avec un contexte GLX

QNativeInterface::QWGLContext

Interface native avec un contexte WGL sous Windows

QOffscreenSurface

Accessible via QOffscreenSurface::nativeInterface().

QNativeInterface::QAndroidOffscreenSurface

Interface native avec une surface hors écran sur Android

QSGTexture

Accessible via QSGTexture::nativeInterface().

QNativeInterface::QSGD3D11Texture

Permet d'accéder aux objets de texture Direct3D 11 et de les adopter.

QNativeInterface::QSGD3D12Texture

Permet l'accès et l'adoption d'objets de texture Direct3D 12

QNativeInterface::QSGMetalTexture

Permet d'accéder aux objets de texture Metal et de les adopter.

QNativeInterface::QSGOpenGLTexture

Permet d'accéder aux objets de texture OpenGL et de les adopter

QNativeInterface::QSGVulkanTexture

Permet d'accéder et d'adopter les objets d'image 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.