QML-Module
Ein QML-Modul stellt versionierte Typen und JavaScript-Ressourcen in einem Typennamensraum bereit, die von Clients verwendet werden können, die das Modul importieren. Die Typen, die ein Modul bereitstellt, können in C++ innerhalb eines Plugins oder in QML-Dokumenten definiert werden. Module nutzen das QML-Versionssystem, mit dem Module unabhängig voneinander aktualisiert werden können.
Die Definition eines QML-Moduls ermöglicht:
- die gemeinsame Nutzung gemeinsamer QML-Typen innerhalb eines Projekts - zum Beispiel eine Gruppe von UI-Komponenten, die von verschiedenen Fenstern verwendet werden
- Die Verteilung von QML-basierten Bibliotheken
- die Modularisierung verschiedener Funktionen, so dass Anwendungen nur die Bibliotheken laden, die sie für ihre individuellen Bedürfnisse benötigen
- Versionierung von Typen und Ressourcen, so dass das Modul sicher aktualisiert werden kann, ohne den Client-Code zu beschädigen
Definieren eines QML-Moduls
Ein Modul wird durch eine Moduldefinitionsdatei (qmldir) definiert. Jedes Modul hat einen zugehörigen Typennamensraum, der den Bezeichner des Moduls darstellt. Ein Modul kann QML-Objekttypen (entweder durch QML-Dokumente oder über ein C++-Plugin definiert) und JavaScript-Ressourcen bereitstellen und kann von Clients importiert werden.
Um ein Modul zu definieren, sollte ein Entwickler die verschiedenen QML-Dokumente, JavaScript-Ressourcen und C++-Plugins, die in das Modul gehören, in einem einzigen Verzeichnis zusammenfassen und eine entsprechende Moduldefinitionsdatei qmldir schreiben, die ebenfalls in das Verzeichnis gelegt werden sollte. Das Verzeichnis kann dann als Modul in den QML-Importpfad installiert werden.
Beachten Sie, dass die Definition eines Moduls nicht die einzige Möglichkeit ist, gemeinsame QML-Typen innerhalb eines Projekts zu nutzen - ein einfacher QML-Dokumentenverzeichnis-Import kann ebenfalls für diesen Zweck verwendet werden.
Unterstützte QML-Modultypen
Es gibt zwei verschiedene Arten von Modulen, die von QML unterstützt werden:
- Identifizierte Module
- Legacy-Module (veraltet)
Identifizierte Module definieren explizit ihren Identifikator und werden im QML-Importpfad installiert. Identifizierte Module sind besser wartbar (aufgrund der Typversionierung) und werden von der QML-Engine mit Garantien für die Typregistrierung versehen, die Legacy-Modulen nicht zur Verfügung stehen. Legacy-Module werden nur unterstützt, damit Legacy-Code weiterhin mit der neuesten Version von QML funktionieren kann, und sollten von Kunden nach Möglichkeit vermieden werden.
Kunden können ein QML-Modul aus QML-Dokumenten oder JavaScript-Dateien importieren. Weitere Informationen zu diesem Thema finden Sie in der Dokumentation zum Importieren eines QML-Moduls.
Bereitstellen von Typen und Funktionalität in einem C++-Plugin
Eine Anwendung, deren Logik zu einem großen Teil in C++ implementiert ist oder die Typen in C++ definiert und diese in QML zur Verfügung stellt, möchte möglicherweise ein QML-Plugin implementieren. Ein Entwickler eines QML-Erweiterungsmoduls möchte vielleicht einige Typen in einem C++-Plugin implementieren (anstatt sie über QML-Dokumente zu definieren), um eine bessere Leistung oder eine größere Flexibilität zu erreichen.
Jedes C++-Plugin für QML hat eine Initialisierungsfunktion, die von der QML-Engine aufgerufen wird, wenn sie das Plugin lädt. Diese Initialisierungsfunktion muss alle Typen registrieren, die das Plugin bereitstellt, darf aber nichts anderes tun (zum Beispiel ist das Instanziieren von QObjects nicht erlaubt).
Siehe Erstellen von C++-Plugins für QML für weitere Informationen.
© 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.