Native Schnittstellen
Die nativen Schnittstellen bieten Zugriff auf native oder plattformspezifische APIs der Klassen, die sie erweitern.
Die Schnittstellen befinden sich im Namespace „ QNativeInterface “ und decken Anwendungsfälle wie den Zugriff auf zugrunde liegende native Handles, die Übernahme bestehender nativer Handles oder die Bereitstellung plattformspezifischer APIs ab.
Anwendungsbeispiel
Zugriff auf zugrunde liegende native Handles
In Situationen, in denen eine Funktion der nativen Plattform in Qt nicht verfügbar ist, kann es hilfreich sein, auf die von Qt verwalteten nativen Handles zuzugreifen und diese stattdessen zum Aufruf der nativen APIs zu verwenden.
Um beispielsweise unter macOS über die native Schnittstelle „ QNativeInterface::QCocoaGLContext “ auf den zugrunde liegenden `NSOpenGLContext` eines ` QOpenGLContext ` zuzugreifen:
using namespace QNativeInterface;
if (auto *cocoaGLContext = glContext->nativeInterface<QCocoaGLContext>())
[cocoaGLContext->nativeContext() makeCurrentContext];Der Zugriff auf die native Schnittstelle erfolgt über den Accessor ` QOpenGLContext::nativeInterface()`, der sicherstellt, dass die angeforderte Schnittstelle verfügbar ist, und andernfalls ` nullptr` zurückgibt. Auf den zugrunde liegenden `NSOpenGLContext` wird dann über den Accessor ` nativeContext()` zugegriffen.
Übernahme bestehender nativer Handles
In manchen Situationen hat die native Plattform oder ein anderes Toolkit ein natives Handle erstellt, das Sie an Qt weitergeben möchten – indem Sie das vorhandene Handle „einbinden“, anstatt ein neues zu erstellen.
Um beispielsweise einen vorhandenen `NSOpenGLContext` zu übernehmen und diesen zur gemeinsamen Nutzung von Ressourcen mit einem von Qt erstellten Kontext zu verwenden:
using namespace QNativeInterface;
QOpenGLContext *adoptedContext = QCocoaGLContext::fromNativeContext(nsOpenGLContext);
anotherContext->setShareContext(adoptedContext);Der übernommene Kontext wird von einer plattformspezifischen Factory-Funktion in der nativen Schnittstelle ` QNativeInterface::QCocoaGLContext ` erstellt.
Zugriff auf plattformspezifische APIs
In manchen Fällen ist eine API zu plattformspezifisch, um in die plattformübergreifenden Qt-Klassen aufgenommen zu werden, ihre Einbindung ist jedoch dennoch sinnvoll. Diese APIs sind entweder auf dieselbe Weise verfügbar wie beim Zugriff auf die zugrunde liegenden nativen Handles – über den Accessor ` nativeInterface()` – oder direkt als statische Funktion in der nativen Schnittstelle.
Beispiel für das Abrufen des OpenGL-Modul-Handles unter Windows:
using namespace QNativeInterface;
HMODULE moduleHandle = QWGLContext::openGLModuleHandle();Quell- und Binärkompatibilität
Für die APIs der nativen Schnittstelle gibt es keine Garantien hinsichtlich der Quell- oder Binärkompatibilität. Das bedeutet, dass eine Anwendung, die diese Schnittstellen nutzt, nur mit der Qt-Version funktioniert, für die sie entwickelt wurde.
Verfügbare Schnittstellen
Eine Liste aller verfügbaren Schnittstellen finden Sie im Namespace „ QNativeInterface “.
QOpenGLContext
Zugriff über ` QOpenGLContext::nativeInterface()`
Native Schnittstelle zu einem NSOpenGLContext unter macOS | |
Native Schnittstelle zu einem EGL-Kontext | |
Native Schnittstelle zu einem GLX-Kontext | |
Native Schnittstelle zu einem WGL-Kontext unter Windows |
QOffscreenSurface
Zugriff über ` QOffscreenSurface::nativeInterface()`.
Native Schnittstelle zu einer Offscreen-Oberfläche unter Android |
QSGTexture
Zugriff über ` QSGTexture::nativeInterface()`.
Bietet Zugriff auf Direct3D 11-Texturobjekte und ermöglicht deren Übernahme | |
Bietet Zugriff auf Direct3D 12-Texturobjekte und ermöglicht deren Verwendung | |
Bietet Zugriff auf Metal-Texturobjekte und ermöglicht deren Verwendung | |
Bietet Zugriff auf OpenGL-Texturobjekte und ermöglicht deren Verwendung | |
Bietet Zugriff auf Vulkan-Bildobjekte und ermöglicht deren Verwendung |
© 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.