Interfaces natives
Les interfaces natives permettent d’accéder aux API natives ou spécifiques à la plateforme des classes qu’elles étendent.
Ces interfaces se trouvent dans l'espace de noms QNativeInterface et couvrent des cas d'utilisation tels que l'accès aux descripteurs natifs sous-jacents, l'adoption de descripteurs natifs existants ou la mise à disposition d'API spécifiques à la plateforme.
Exemple d'utilisation
Accès aux descripteurs natifs sous-jacents
Dans les cas où une fonctionnalité de la plateforme native n’est pas exposée dans Qt, il peut être utile d’accéder aux descripteurs natifs gérés par Qt et de les utiliser pour appeler les API natives à la place.
Par exemple, pour accéder au NSOpenGLContext sous-jacent d’un QOpenGLContext sous 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, dans le cas contraire, renvoie ` nullptr`. Le `NSOpenGLContext` sous-jacent est ensuite accessible via l’accesseur ` nativeContext()`.
Adoption de des descripteurs natifs existants
Dans certaines situations, la plateforme native, ou une autre boîte à outils, a créé un descripteur natif que vous souhaitez transmettre à Qt — en encapsulant le descripteur existant au lieu d’en créer un nouveau.
Par exemple, pour adopter un NSOpenGLContext existant et l’utiliser afin de 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 de fabrication spécifique à la plateforme dans l'interface native ` QNativeInterface::QCocoaGLContext `.
Accès aux API spécifiques à la plateforme
Dans certains cas, une API est trop spécifique à la plateforme pour être incluse dans les classes Qt multiplateformes, mais il reste utile de l’inclure. Ces API sont disponibles soit de la même manière que lors de l’accès aux descripteurs natifs sous-jacents, via l’accesseur ` nativeInterface()`, soit directement en tant que fonction statique dans l’interface native.
Par exemple, pour récupérer le descripteur du module OpenGL sous Windows :
using namespace QNativeInterface;
HMODULE moduleHandle = QWGLContext::openGLModuleHandle();Compatibilité source et binaire
Il n’existe aucune garantie de compatibilité source ou binaire pour les API de l’interface native, ce qui signifie qu’une application utilisant ces interfaces n’est garantie de fonctionner qu’avec la version de Qt pour laquelle elle a été développée.
Interfaces disponibles
Pour obtenir la liste de toutes les interfaces disponibles, consultez l’espace de noms QNativeInterface.
QOpenGLContext
Accessible via QOpenGLContext::nativeInterface().
Interface native vers un NSOpenGLContext sous macOS | |
Interface native vers un contexte EGL | |
Interface native vers un contexte GLX | |
Interface native vers un contexte WGL sous Windows |
QOffscreenSurface
Accessible via la fonction ` QOffscreenSurface::nativeInterface()`.
Interface native vers une surface hors écran sous Android |
QSGTexture
Accessible via QSGTexture::nativeInterface().
Permet d'accéder aux objets de texture Direct3D 11 et de les adopter | |
Permet d'accéder aux objets de texture Direct3D 12 et de les adopter | |
Permet d'accéder aux objets de texture Metal et d'adopter ceux-ci | |
Permet d'accéder aux objets de texture OpenGL et d'adopter ceux-ci | |
Permet d'accéder aux objets image Vulkan et d'adopter ceux-ci |
© 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.