Native Schnittstellen
Die nativen Schnittstellen ermöglichen den 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 vorhandener nativer Handles oder die Bereitstellung plattformspezifischer APIs ab.
Beispiel für die Verwendung
Zugriff auf zugrunde liegende native Handles
In Situationen, in denen eine Funktion der nativen Plattform nicht in Qt verfügbar ist, kann es hilfreich sein, auf die nativen Handles zuzugreifen, die von Qt verwaltet werden, und diese stattdessen zum Aufrufen der nativen APIs zu verwenden.
Zum Beispiel, um auf den zugrundeliegenden NSOpenGLContext einer QOpenGLContext auf macOS zuzugreifen, über die QNativeInterface::QCocoaGLContext native Schnittstelle:
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. Der Zugriff auf den zugrundeliegenden NSOpenGLContext erfolgt dann über den Accessor nativeContext().
Übernahme vorhandener nativer Handles
Ähnlich wie bei der Einbettung von Fenstern gibt es Situationen, in denen die native Plattform oder ein anderes Toolkit ein natives Handle erstellt hat, das Sie an Qt weitergeben möchten - indem Sie das bestehende Handle umhüllen, anstatt ein neues zu erstellen.
Zum Beispiel, um einen existierenden NSOpenGLContext zu übernehmen und diesen zu verwenden, um Ressourcen mit einem von Qt erstellten Kontext zu teilen:
using namespace QNativeInterface; QOpenGLContext *adoptedContext = QCocoaGLContext::fromNativeContext(nsOpenGLContext); anotherContext->setShareContext(adoptedContext);
Der übernommene Kontext wird durch eine plattformspezifische Fabrikfunktion 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, ist aber dennoch nützlich, um sie aufzunehmen. Diese APIs sind entweder auf dieselbe Weise wie beim Zugriff auf die zugrunde liegenden nativen Handles verfügbar, nämlich über den Accessor nativeInterface(), oder direkt als statische Funktion in der nativen Schnittstelle.
Zum Beispiel, um das OpenGL-Modul-Handle unter Windows herauszuziehen:
using namespace QNativeInterface; HMODULE moduleHandle = QWGLContext::openGLModuleHandle();
Quell- und Binärkompatibilität
Es gibt keine Garantien für die Quell- oder Binärkompatibilität der nativen Schnittstellen-APIs. Das bedeutet, dass eine Anwendung, die diese Schnittstellen verwendet, 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
Zu erreichen über QOpenGLContext::nativeInterface().
Native Schnittstelle zu einem NSOpenGLContext auf macOS | |
Native Schnittstelle zu einem EGL-Kontext | |
Native Schnittstelle zu einem GLX-Kontext | |
Native Schnittstelle zu einem WGL-Kontext unter Windows |
QOffscreenSurface
Wird über QOffscreenSurface::nativeInterface() aufgerufen.
Native Schnittstelle zu einer Offscreen-Oberfläche unter Android |
QSGTexture
Zugriff über QSGTexture::nativeInterface().
Ermöglicht den Zugriff auf und die Übernahme von Direct3D 11-Texturobjekten | |
Ermöglicht den Zugriff auf und die Übernahme von Direct3D 12-Texturobjekten | |
Ermöglicht den Zugriff auf und die Übernahme von Metal-Texturobjekten | |
Ermöglicht den Zugriff auf und die Übernahme von OpenGL-Texturobjekten | |
Ermöglicht den Zugriff auf und die Übernahme von Vulkan-Bildobjekten |
© 2025 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.