Interfaces nativas
Las interfaces nativas proporcionan acceso a las API nativas o específicas de la plataforma de las clases a las que extienden.
Las interfaces se encuentran en el espacio de nombres QNativeInterface, y cubren casos de uso como el acceso a los manejadores nativos subyacentes, la adopción de manejadores nativos existentes o la provisión de API específicas de la plataforma.
Ejemplo de uso
Acceso a los gestores nativos subyacentes
En situaciones donde una característica de la plataforma nativa no está expuesta en Qt, puede ser útil acceder a los manejadores nativos mantenidos por Qt, y usarlos para llamar a las APIs nativas en su lugar.
Por ejemplo, para acceder al NSOpenGLContext subyacente de un QOpenGLContext en macOS, a través de la interfaz nativa QNativeInterface::QCocoaGLContext:
using namespace QNativeInterface; if (auto *cocoaGLContext = glContext->nativeInterface<QCocoaGLContext>()) [cocoaGLContext->nativeContext() makeCurrentContext];
Se accede a la interfaz nativa a través del accesor QOpenGLContext::nativeInterface(), que se asegura de que la interfaz solicitada está disponible, y en caso contrario devuelve nullptr. A continuación, se accede al NSOpenGLContext subyacente a través del accesor nativeContext().
Adopción de manejadores nativos existentes
De forma similar al caso de uso de la incrustación de ventanas, hay situaciones en las que la plataforma nativa, u otro conjunto de herramientas, ha creado un manejador nativo que te gustaría pasar a Qt - envolviendo el manejador existente en lugar de crear uno nuevo.
Por ejemplo, adoptar un NSOpenGLContext existente, y usarlo para compartir recursos con un contexto creado por Qt:
using namespace QNativeInterface; QOpenGLContext *adoptedContext = QCocoaGLContext::fromNativeContext(nsOpenGLContext); anotherContext->setShareContext(adoptedContext);
El contexto adoptado se crea mediante una función de fábrica específica de la plataforma en la interfaz nativa QNativeInterface::QCocoaGLContext.
Acceso a API específicas de la plataforma
En algunos casos, una API es demasiado específica de la plataforma para ser incluida en las clases Qt multiplataforma, pero sigue siendo útil incluirla. Estas API están disponibles de la misma manera que cuando se accede a los manejadores nativos subyacentes, a través del accesorio nativeInterface(), o directamente como función estática en la interfaz nativa.
Por ejemplo, para extraer el manejador del módulo OpenGL en Windows:
using namespace QNativeInterface; HMODULE moduleHandle = QWGLContext::openGLModuleHandle();
Compatibilidad binaria y de código fuente
No existen garantías de compatibilidad binaria o de código fuente para las APIs de las interfaces nativas, lo que significa que una aplicación que utilice estas interfaces sólo está garantizada para funcionar con la versión de Qt con la que fue desarrollada.
Interfaces disponibles
Para obtener una lista de todas las interfaces disponibles, consulte el espacio de nombres QNativeInterface.
QOpenGLContext
Se accede a través de QOpenGLContext::nativeInterface().
Interfaz nativa para un contexto NSOpenGLContext en macOS | |
Interfaz nativa para un contexto EGL | |
Interfaz nativa para un contexto GLX | |
Interfaz nativa para un contexto WGL en Windows |
QOffscreenSurface
Se accede a través de QOffscreenSurface::nativeInterface().
Interfaz nativa para una superficie fuera de pantalla en Android |
QSGTexture
Se accede a través de QSGTexture::nativeInterface().
Proporciona acceso y permite adoptar objetos de textura Direct3D 11 | |
Proporciona acceso a objetos de textura Direct3D 12 y permite adoptarlos. | |
Proporciona acceso y permite adoptar objetos de textura Metal | |
Proporciona acceso y permite adoptar objetos de textura OpenGL | |
Proporciona acceso y permite adoptar objetos de imagen 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.