Auf dieser Seite

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

Moderne QML-Module

QML-Module werden am besten mit der CMake-API definiert, insbesondere mit qt_add_qml_module. Die folgenden Abschnitte beschreiben alle Aspekte der Erstellung eines modernen QML-Moduls.

Definieren von Objekttypen durch QML-Dokumente

QML-Typen können direkt in QML-Dokumenten definiert werden, was der einfachste Weg ist, wiederverwendbare Komponenten zu erstellen. Jede QML-Datei, die mit einem Großbuchstaben beginnt, definiert automatisch einen Typ, der von anderen QML-Dateien in demselben Modul verwendet werden kann.

Definieren von QML-Typen aus C++

Zur Verbesserung der Leistung oder für den Zugriff auf Low-Level-APIs können Typen in C++ definiert und für QML bereitgestellt werden. C++-Typen bieten volle Kontrolle über Eigenschaften, Methoden und Signale und profitieren von statischer Typisierung und Kompilierung.

Mit CMake alles zusammenbinden

Der CMake-Befehlqt_add_qml_module fasst QML-Dateien, C++-Typen und Ressourcen zu einem zusammenhängenden Modul zusammen. Die Typregistrierung, Ressourcenkompilierung und die Integration von QML-Werkzeugen werden automatisch durchgeführt, was es zum empfohlenen Ansatz für die Entwicklung moderner QML-Module macht.

QML-Module modernisieren

Dieses Handbuch hilft bei der Migration älterer CMake-basierter QML-Module auf neuere Versionen von Qt. Er beschreibt, wie man sich an neuere CMake-Richtlinien anpasst und veraltete Techniken vermeidet.

Feinabstimmung von QML-Modulen

Die erweiterten Modulkonfigurationsoptionen in Writing QML Modules ermöglichen eine feinkörnige Steuerung des Modulverhaltens. Dazu gehören das Hinzufügen mehrerer QML-Module zur gleichen Binärdatei, die Versionierung, benutzerdefinierte Verzeichnislayouts und erweiterte 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 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 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 C++ Plugins für QML erstellen für weitere Informationen.

Siehe auch QML-Module modernisieren und QML-Module nach CMake portieren.

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