Erstellen von C++-Plugins für QML

Erstellen eines Plugins

Die QML engine lädt C++-Plugins für QML. Solche Plugins werden normalerweise in einem QML-Erweiterungsmodul bereitgestellt und können Typen zur Verwendung durch Clients in QML-Dokumenten bereitstellen, die das Modul importieren. Ein Modul benötigt mindestens einen registrierten Typ, um als gültig betrachtet zu werden.

QQmlEngineExtensionPlugin ist eine Plugin-Schnittstelle, mit der Sie QML-Erweiterungen erstellen können, die dynamisch in QML-Anwendungen geladen werden können. Mit diesen Erweiterungen können benutzerdefinierte QML-Typen für die QML-Engine verfügbar gemacht werden.

Um ein QML-Erweiterungs-Plugin zu schreiben:

  1. Verwenden Sie die Unterklasse QQmlEngineExtensionPlugin und das Makro Q_PLUGIN_METADATA(), um das Plugin beim Qt-Metaobjektsystem zu registrieren.
  2. Verwenden Sie die Makros QML_ELEMENT und QML_NAMED_ELEMENT(), um QML-Typen zu deklarieren.
  3. 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>
  4. Wenn Sie qmake verwenden, erstellen Sie eine qmldir-Datei, um das Plugin zu beschreiben. Beachten Sie, dass CMake standardmäßig die qmldir-Datei automatisch erzeugt.

QML-Erweiterungsplugins sind entweder für anwendungsspezifische oder bibliotheksähnliche Plugins. Bibliotheks-Plugins sollten sich auf die Registrierung von Typen beschränken, da jede Manipulation des Root-Kontextes der Engine zu Konflikten oder anderen Problemen im Code des Bibliotheksbenutzers führen kann.

Hinweis: Wenn Sie die CMake qt_add_qml_module API verwenden, wird automatisch ein Plugin für Sie erzeugt. Es kümmert sich um die Typregistrierung. Sie müssen nur dann ein eigenes Plugin schreiben, wenn Sie spezielle Anforderungen haben, wie z.B. die Registrierung von benutzerdefinierten Bildanbietern. In diesem Fall übergeben Sie NO_GENERATE_PLUGIN_SOURCE an den Aufruf qt_add_qml_module, um die Erzeugung des Standard-Plugins zu deaktivieren.

Der Linker könnte fälschlicherweise die generierte Typregistrierungsfunktion als Optimierung entfernen. Sie können dies verhindern, indem Sie irgendwo in Ihrem Code einen synthetischen flüchtigen Zeiger auf die Funktion deklarieren. Wenn Ihr Modul "my.module" heißt, fügen Sie die Vorwärtsdeklaration im globalen Bereich ein:

void qml_register_types_my_module();

Fügen Sie dann den folgenden Codeschnipsel in die Implementierung jeder Funktion ein, die Teil derselben Binärdatei ist wie die Registrierung:

volatile auto registration = &qml_register_types_my_module;
Q_UNUSED(registration);

Verweis

© 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.