QML-Module
Ein QML-Modul stellt versionierte Typen und JavaScript-Ressourcen in einem Typ-Namespace bereit, die von Clients genutzt werden können, die das Modul importieren. Die von einem Modul bereitgestellten Typen können in C++ innerhalb eines Plugins oder in QML-Dokumenten definiert werden. Module nutzen das QML-Versionsverwaltungssystem, wodurch Module unabhängig voneinander aktualisiert werden können.
Die Definition eines QML-Moduls ermöglicht:
- Die gemeinsame Nutzung gängiger QML-Typen innerhalb eines Projekts – zum Beispiel einer Gruppe von UI-Komponenten, die von verschiedenen Fenstern verwendet werden
- Die Verteilung von QML-basierten Bibliotheken
- Die Modularisierung einzelner Funktionen, sodass Anwendungen nur die Bibliotheken laden, die für ihre individuellen Anforderungen notwendig sind
- Die Versionierung von Typen und Ressourcen, sodass das Modul sicher aktualisiert werden kann, ohne den Client-Code zu beeinträchtigen
Moderne QML-Module
QML-Module lassen sich am besten mithilfe der CMake-API definieren, insbesondere mit ` qt_add_qml_module`. Die folgenden Abschnitte beschreiben alle Aspekte der Erstellung eines modernen QML-Moduls.
Definition von Objekttypen über QML-Dokumente
QML-Typen können direkt in QML-Dokumenten definiert werden – dies ist der einfachste Weg, wiederverwendbare Komponenten zu erstellen. Jede QML-Datei, die mit einem Großbuchstaben beginnt, definiert automatisch einen Typ, der von anderen QML-Dateien im selben Modul verwendet werden kann.
Definition von QML-Typen in C++
Für eine bessere Leistung oder den Zugriff auf Low-Level-APIs können Typen in C++ definiert und für QML verfügbar gemacht werden. C++-Typen bieten vollständige Kontrolle über Eigenschaften, Methoden und Signale und profitieren gleichzeitig von statischer Typisierung und Kompilierung.
Alles mit CMake zusammenführen
Der CMake-Befehl „qt_add_qml_module “ fasst QML-Dateien, C++-Typen und Ressourcen zu einem einheitlichen Modul zusammen. Er übernimmt automatisch die Typregistrierung, die Kompilierung von Ressourcen und die Integration von QML-Tools und ist daher der empfohlene Ansatz für die moderne Entwicklung von QML-Modulen.
Modernisierung von QML-Modulen
Dieser Leitfaden hilft bei der Migration älterer CMake-basierter Qml-Module auf neuere Versionen von Qt. Er behandelt, wie man sich an neuere CMake-Richtlinien anpasst und veraltete Techniken vermeidet.
Feinabstimmung von QML-Modulen
Erweiterte Konfigurationsoptionen für Module im Abschnitt „QML-Module schreiben“ ermöglichen eine detaillierte Steuerung des Modulverhaltens. Dazu gehören das Hinzufügen mehrerer QML-Module zu derselben Binärdatei, Versionsverwaltung, benutzerdefinierte Verzeichnisstrukturen sowie fortgeschrittene Themen zu QML-Plugins.
Alte QML-Module
Hinweis: Verwenden Sie die CMake-API, um ein QML-Modul zu definieren. Definieren Sie Ihr QML-Modul nur dann manuell, wenn Sie „ qmake “ verwenden müssen.
Ein Modul wird durch eine qmldir-Datei mit der Moduldefinition definiert. Jedem Modul ist ein Typ-Namespace zugeordnet, der als Identifikator des Moduls dient. Ein Modul kann QML-Objekttypen (die entweder durch QML-Dokumente oder über ein C++-Plugin definiert sind) sowie JavaScript-Ressourcen bereitstellen und von Clients importiert werden.
Um ein Modul zu definieren, sollte ein Entwickler die verschiedenen QML-Dokumente, JavaScript-Ressourcen und C++-Plugins, die zu dem Modul gehören, in einem einzigen Verzeichnis zusammenfassen und eine entsprechende qmldir-Datei mit der Moduldefinition erstellen, die ebenfalls in diesem Verzeichnis abgelegt 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 gemeinsam zu nutzen – zu diesem Zweck kann auch ein einfacher Import des QML-Dokumentverzeichnisses verwendet werden.
Unterstützte QML-Modultypen
QML unterstützt zwei verschiedene Modultypen:
- Identifizierte Module
- Legacy-Module (veraltet)
Identifizierte Module definieren ihren Bezeichner explizit und werden in den QML-Importpfad installiert. Identifizierte Module sind (aufgrund der Typversionierung) besser wartbar und erhalten von der QML-Engine Garantien zur Typregistrierung, die für Legacy-Module nicht gelten. Legacy-Module werden nur unterstützt, damit Legacy-Code weiterhin mit der neuesten Version von QML funktioniert, und sollten von Clients nach Möglichkeit vermieden werden.
Kunden können ein QML-Modul aus QML-Dokumenten oder JavaScript-Dateien heraus importieren. Weitere Informationen zu diesem Thema finden Sie in der Dokumentation zum Importieren eines QML-Moduls.
Bereitstellung von Typen und Funktionalität in einem C++-Plugin
Eine Anwendung, in der viel Logik in C++ implementiert ist oder die Typen in C++ definiert und diese für QML verfügbar macht, möchte möglicherweise ein QML-Plugin implementieren. Ein Entwickler von QML-Erweiterungsmodulen möchte möglicherweise einige Typen in einem C++-Plugin implementieren (anstatt sie über QML-Dokumente zu definieren), um eine bessere Leistung oder größere Flexibilität zu erzielen.
Jedes C++-Plugin für QML verfügt über eine Initialisierungsfunktion, die von der QML-Engine beim Laden des Plugins aufgerufen wird. Diese Initialisierungsfunktion muss alle vom Plugin bereitgestellten Typen registrieren, darf jedoch keine weiteren Aktionen ausführen (beispielsweise ist das Instanziieren von QObjects nicht zulässig).
Weitere Informationen finden Sie unter „Erstellen von C++-Plugins für QML “.
Siehe auch „Modernisierung von QML-Modulen “ und „Portierung von QML-Modulen nach CMake“.
© 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.