Erstellen von C++-Plugins für QML
Erstellen eines Plugins
Der „ QML engine “ lädt C++-Plugins für QML. Solche Plugins werden in der Regel in einem QML-Erweiterungsmodul bereitgestellt und können Typen bereitstellen, die von Clients in QML-Dokumenten verwendet werden können, die das Modul importieren. Ein Modul muss mindestens einen registrierten Typ enthalten, um als gültig zu gelten.
QQmlEngineExtensionPlugin ist eine Plugin-Schnittstelle, mit der Sie QML-Erweiterungen erstellen können, die dynamisch in QML-Anwendungen geladen werden können. Diese Erweiterungen ermöglichen es, benutzerdefinierte QML-Typen der QML-Engine zur Verfügung zu stellen.
So erstellen Sie ein QML-Erweiterungs-Plugin:
- Erstellen Sie eine Unterklasse von ` QQmlEngineExtensionPlugin ` und verwenden Sie das Makro ` Q_PLUGIN_METADATA()``, um das Plugin beim Qt-Metaobjektsystem zu registrieren.
- Verwenden Sie die Makros „ QML_ELEMENT “ und „ QML_NAMED_ELEMENT()“, um QML-Typen zu deklarieren.
- Konfigurieren Sie Ihre Build-Datei.
CMake:
qt_add_qml_module(<target> URI <my.import.name> VERSION 1.0 QML_FILES <app.qml> NO_RESOURCE_TARGET_PATH )qmake:
CONFIG += qmltypes QML_IMPORT_NAME = <my.import.name> QML_IMPORT_MAJOR_VERSION = <version> - Wenn Sie qmake verwenden, erstellen Sie eine qmldir-Datei, um das Plugin zu beschreiben. Beachten Sie, dass CMake die qmldir-Datei standardmäßig automatisch generiert.
QML-Erweiterungs-Plugins sind entweder für anwendungsspezifische oder bibliotheksähnliche Plugins vorgesehen. Bibliotheks-Plugins sollten sich auf die Registrierung von Typen beschränken, da jede Manipulation des Root-Kontexts der Engine zu Konflikten oder anderen Problemen im Code des Bibliotheksnutzers führen kann.
Hinweis: Bei Verwendung der CMake-API `qt_add_qml_module ` wird automatisch ein Plugin für Sie generiert. Dieses übernimmt die Typregistrierung. Sie müssen nur dann ein benutzerdefiniertes Plugin schreiben, wenn Sie spezielle Anforderungen haben, wie beispielsweise die Registrierung benutzerdefinierter Bildanbieter. Übergeben Sie in diesem Fall NO_GENERATE_PLUGIN_SOURCE an den Aufruf von ` qt_add_qml_module `, um die Generierung des Standard-Plugins zu deaktivieren.
Der Linker könnte die generierte Typregistrierungsfunktion fälschlicherweise als Optimierung entfernen. Sie können dies verhindern, indem Sie irgendwo in Ihrem Code einen synthetischen, volatilen Zeiger auf die Funktion deklarieren. Die Funktion wird von `qmltyperegistrar` generiert und heißt „ qml_register_types_ “, verkettet mit der Modul-URI, wobei alle Punkte durch Unterstriche ersetzt werden.
Wenn Ihr Modul „my.module“ heißt, würden Sie die Vorwärtsdeklaration im globalen Bereich hinzufügen:
void qml_register_types_my_module();Fügen Sie anschließend den folgenden Codeausschnitt in die Implementierung einer beliebigen Funktion ein, die Teil derselben Binärdatei wie die Registrierung ist:
volatile auto registration = &qml_register_types_my_module;
Q_UNUSED(registration);Referenz
- QML-Erweiterungen mit C++ schreiben – enthält ein Kapitel zum Erstellen von QML-Plugins.
- QML-Typen aus C++ definieren – Informationen zur Registrierung von C++-Typen in der Laufzeitumgebung.
- So erstellen Sie Qt-Plugins – Informationen zu Qt-Plugins
© 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.