Moduldefinition qmldir-Dateien
Es gibt zwei verschiedene Arten von qmldir
Dateien:
- Dateien, die das QML-Dokumentenverzeichnis auflisten
- QML-Modul-Definitionsdateien
Diese Dokumentation behandelt nur die zweite Form der qmldir
Datei, die die QML-Typen, JavaScript-Dateien und Plugins auflistet, die unter einem Modul verfügbar sind. Weitere Informationen über die erste Form der Datei qmldir
finden Sie unter Verzeichnisauflistung qmldir-Dateien.
Inhalt einer Moduldefinitionsdatei qmldir
Eine qmldir
Datei ist eine Klartextdatei, die die folgenden Befehle enthält:
- Modulbezeichner-Deklaration
- Objekttyp-Deklaration
- Interne Objekttyp-Deklaration
- JavaScript-Ressourcen-Deklaration
- Plugin-Deklaration
- Plugin Classname Deklaration
- Typbeschreibungsdatei Deklaration
- Deklaration von Modul-Abhängigkeiten
- Modul-Import-Deklaration
- Designer Support Deklaration
- Deklaration des bevorzugten Pfades
Hinweis: Jeder Befehl in einer qmldir
Datei muss in einer eigenen Zeile stehen.
Zusätzlich zu den Befehlen können Sie auch Kommentare hinzufügen, d. h. Zeilen, die mit #
beginnen.
Modulbezeichner-Deklaration
module <ModuleIdentifier>
Deklariert den Modulbezeichner des Moduls. Der <Modulbezeichner> ist der (gepunktete URI-Notation) Bezeichner für das Modul, der mit dem Installationspfad des Moduls übereinstimmen muss.
Die Modulbezeichner-Direktive muss in der ersten Zeile der Datei stehen. Es darf genau eine Modulbezeichner-Direktive in der Datei qmldir
vorhanden sein.
Beispiel:
module ExampleModule
Objekttyp-Deklaration
[singleton] <TypeName> <InitialVersion> <File>
Deklariert einen QML-Objekttyp, der durch das Modul verfügbar gemacht werden soll.
[singleton]
Optional. Wird verwendet, um einen Singleton-Typ zu deklarieren.<TypeName>
ist der Typ, der zur Verfügung gestellt wird<InitialVersion>
ist die Modulversion, für die der Typ zur Verfügung gestellt werden soll<File>
ist der (relative) Dateiname der QML-Datei, die den Typ definiert
In der Datei qmldir
können null oder mehr Objekttyp-Deklarationen vorhanden sein. Allerdings muss jeder Objekttyp innerhalb einer bestimmten Version des Moduls einen eindeutigen Typnamen haben.
Hinweis: Um einen Typ singleton
zu deklarieren, muss die QML-Datei, die den Typ definiert, die Anweisung pragma Singleton
enthalten.
Beispiel:
//Style.qml with custom singleton type definition pragma Singleton import QtQuick 2.0 QtObject { property int textSize: 20 property color textColor: "green" } // qmldir declaring the singleton type module CustomStyles singleton Style 1.0 Style.qml // singleton type in use import QtQuick 2.0 import CustomStyles 1.0 Text { font.pixelSize: Style.textSize color: Style.textColor text: "Hello World" }
Interne Objekttyp-Deklaration
internal <TypeName> <File>
Deklariert einen Objekttyp, der sich im Modul befindet, aber den Benutzern des Moduls nicht zur Verfügung gestellt werden soll.
In der Datei qmldir
können null oder mehr interne Objekttyp-Deklarationen vorhanden sein.
Beispiel:
internal MyPrivateType MyPrivateType.qml
Dies ist notwendig, wenn das Modul aus der Ferne importiert wird (siehe Ferninstallierte identifizierte Module), denn wenn ein exportierter Typ von einem nicht exportierten Typ innerhalb des Moduls abhängt, muss die Engine auch den nicht exportierten Typ laden.
JavaScript-Ressourcen-Deklaration
<ResourceIdentifier> <InitialVersion> <File>
Deklariert eine JavaScript-Datei, die durch das Modul verfügbar gemacht werden soll. Die Ressource wird über den angegebenen Bezeichner mit der angegebenen Versionsnummer zur Verfügung gestellt.
In der Datei qmldir
können null oder mehr JavaScript-Ressourcen-Deklarationen vorhanden sein. Jede JavaScript-Ressource muss jedoch innerhalb einer bestimmten Version des Moduls einen eindeutigen Bezeichner haben.
Beispiel:
MyScript 1.0 MyScript.js
Weitere Informationen finden Sie in der Dokumentation zur Definition von JavaScript-Ressourcen und zum Import von JavaScript-Ressourcen in QML.
Plugin-Deklaration
[optional] plugin <Name> [<Path>]
Deklariert ein Plugin, das vom Modul zur Verfügung gestellt werden soll.
optional
bedeutet, dass das Plugin selbst keinen relevanten Code enthält und nur dazu dient, eine Bibliothek zu laden, auf die es verweist. Wenn angegeben und wenn irgendwelche Typen für das Modul bereits verfügbar sind, was anzeigt, dass die Bibliothek auf andere Weise geladen wurde, wird QML das Plugin nicht laden.<Name>
ist der Name der Plugin-Bibliothek. Dieser ist normalerweise nicht identisch mit dem Dateinamen der Plugin-Binärdatei, der plattformabhängig ist. Zum Beispiel würde die BibliothekMyAppTypes
unter LinuxlibMyAppTypes.so
und unter WindowsMyAppTypes.dll
erzeugen.<Path>
(optional) spezifiziert entweder:- einen absoluten Pfad zu dem Verzeichnis, das die Plugin-Datei enthält, oder
- einen relativen Pfad von dem Verzeichnis, das die Datei
qmldir
enthält, zu dem Verzeichnis, das die Plugin-Datei enthält.
Standardmäßig sucht die Engine nach der Plugin-Bibliothek in dem Verzeichnis, das die Datei qmldir
enthält. (Der Plugin-Suchpfad kann mit QQmlEngine::pluginPathList() abgefragt und mit QQmlEngine::addPluginPath() geändert werden).
In der Datei qmldir
können null oder mehr C++-Plugin-Deklarationen vorhanden sein. Da das Laden von Plugins jedoch eine relativ teure Operation ist, wird den Clients empfohlen, höchstens ein einziges Plugin anzugeben.
Beispiel:
plugin MyPluginLibrary
Plugin Classname Deklaration
classname <C++ plugin class>
Gibt den Klassennamen des vom Modul verwendeten C++-Plugins an.
Diese Information wird für alle QML-Module benötigt, die für zusätzliche Funktionalität von einem C++-Plugin abhängen. Qt Quick Anwendungen, die mit statischem Linking erstellt wurden, können die Modulimporte ohne diese Information nicht auflösen.
Deklaration einer Typbeschreibungsdatei
typeinfo <File>
Deklariert eine Typbeschreibungsdatei für das Modul, die von QML-Tools wie Qt Creator gelesen werden kann, um auf Informationen über die von den Plugins des Moduls definierten Typen zuzugreifen. <File>
ist der (relative) Dateiname einer .qmltypes
Datei.
Beispiel:
typeinfo mymodule.qmltypes
Ohne eine solche Datei können QML-Tools möglicherweise keine Funktionen wie die Code-Vervollständigung für die in Ihren Plugins definierten Typen anbieten.
Deklaration von Modulabhängigkeiten
depends <ModuleIdentifier> <InitialVersion>
Deklariert, dass dieses Modul von einem anderen abhängt.
Beispiel:
depends MyOtherModule 1.0
Diese Deklaration ist nur in Fällen notwendig, in denen die Abhängigkeit versteckt ist: z. B. wenn der C++-Code eines Moduls verwendet wird, um QML (vielleicht bedingt) zu laden, das dann von anderen Modulen abhängt. In solchen Fällen ist die depends
Deklaration notwendig, um die anderen Module in Anwendungspakete einzubinden.
Modul-Import-Deklaration
import <ModuleIdentifier> [<Version>]
Deklariert, dass dieses Modul ein anderes importiert.
Beispiel:
import MyOtherModule 1.0
Die Typen des anderen Moduls werden in demselben Typennamensraum verfügbar gemacht, in den dieses Modul importiert wird. Wird die Version weggelassen, wird die letzte verfügbare Version des anderen Moduls importiert. Die Angabe von auto
als Version importiert die gleiche Version wie die in der QML-Anweisung import
angegebene Version dieses Moduls.
Erklärung zur Designer-Unterstützung
designersupported
Setzen Sie diese Eigenschaft, wenn das Plugin von Qt Quick Designer unterstützt wird. In der Standardeinstellung wird das Plugin nicht unterstützt.
Ein Plugin, das von Qt Quick Designer unterstützt wird, muss ordnungsgemäß getestet werden. Dies bedeutet, dass das Plugin nicht abstürzt, wenn es innerhalb der qml2puppet läuft, die von Qt Quick Designer zur Ausführung von QML verwendet wird. Generell sollte das Plugin im Qt Quick Designer gut funktionieren und keine Show-Stopper verursachen, wie z.B. übermäßig viel Speicher benötigen, die qml2puppet stark verlangsamen oder irgendetwas anderes, das das Plugin im Qt Quick Designer effektiv unbrauchbar macht.
Die Elemente eines nicht unterstützten Plugins werden im Qt Quick Designer nicht gezeichnet, aber sie sind immer noch als leere Boxen verfügbar und die Eigenschaften können bearbeitet werden.
Bevorzugte Pfaddeklaration
prefer <Path>
Diese Eigenschaft weist die QML-Engine an, alle weiteren Dateien für dieses Modul aus <Pfad> und nicht aus dem aktuellen Verzeichnis zu laden. Dies kann verwendet werden, um Dateien zu laden, die mit qmlcachegen kompiliert wurden.
Zum Beispiel können Sie die QML-Dateien eines Moduls als Ressourcen zu einem Ressourcenpfad :/my/path/MyModule/
hinzufügen. Fügen Sie dann prefer :/my/path/MyModule
zur qmldir-Datei hinzu, um die Dateien im Ressourcensystem und nicht die im Dateisystem zu verwenden. Wenn Sie dann qmlcachegen für diese Dateien verwenden, stehen die vorkompilierten Dateien allen Clients des Moduls zur Verfügung.
Versionierungs-Semantik
Alle QML-Typen, die für eine bestimmte Hauptversion exportiert werden, sind mit der neuesten Version der gleichen Hauptversion verfügbar. Wenn ein Modul beispielsweise einen Typ MyButton
in Version 1.0 und einen Typ MyWindow
in Version 1.1 bereitstellt, können Clients, die die Version 1.1
des Moduls importieren, die Typen MyButton
und MyWindow
verwenden. Umgekehrt gilt dies jedoch nicht: Ein Typ, der für eine bestimmte Unterversion exportiert wurde, kann nicht verwendet werden, wenn eine ältere oder frühere Unterversion importiert wird. Wenn der Kunde im oben genannten Beispiel die Version 1.0
des Moduls importiert hat, kann er nur den Typ MyButton
, nicht aber den Typ MyWindow
verwenden.
Ein Modul kann mehrere Hauptversionen anbieten, aber die Kunden haben jeweils nur Zugriff auf eine Hauptversion. Wenn Sie beispielsweise MyExampleModule 2.0
importieren, können Sie nur auf diese Hauptversion zugreifen und nicht auf die vorherige Hauptversion. Obwohl Sie die Artefakte, die zu verschiedenen Hauptversionen gehören, unter einem Sigle-Verzeichnis und einer qmldir
-Datei organisieren können, wird empfohlen, für jede Hauptversion unterschiedliche Verzeichnisse zu verwenden. Wenn Sie sich für den früheren Ansatz entscheiden (ein Verzeichnis und eine qmldir
Datei), versuchen Sie, das Versionssuffix für die Dateinamen zu verwenden. Zum Beispiel können Artefakte, die zu MyExampleModule 2.0
gehören, das Suffix .2
in ihrem Dateinamen verwenden.
Eine Version kann nicht importiert werden, wenn keine Typen explizit für diese Version exportiert wurden. Wenn ein Modul in Version 1.0 einen Typ MyButton
und in Version 1.1 einen Typ MyWindow
bereitstellt, können Sie Version 1.2 oder Version 2.0 dieses Moduls nicht importieren.
Ein Typ kann von verschiedenen Dateien in verschiedenen Unterversionen definiert werden. In diesem Fall wird beim Import durch Clients die am besten passende Version verwendet. Wenn zum Beispiel ein Modul die folgenden Typen über seine qmldir
Datei spezifiziert hat:
module ExampleModule MyButton 1.0 MyButton.qml MyButton 1.1 MyButton11.qml MyButton 1.3 MyButton13.qml MyRectangle 1.2 MyRectangle12.qml
Ein Client, der die Version 1.2
von ExampleModule
importiert, kann die Typdefinition von MyButton
verwenden, die von MyButton11.qml
bereitgestellt wird, da sie die neueste Version dieses Typs ist, und die Typdefinition von MyRectangle
, die von MyRectangle12.qml
bereitgestellt wird.
Das Versionssystem stellt sicher, dass eine gegebene QML-Datei unabhängig von der Version der installierten Software funktioniert, da ein versionierter Import nur Typen für diese Version importiert und andere Bezeichner verfügbar lässt, auch wenn die tatsächlich installierte Version diese Bezeichner andernfalls bereitstellen könnte.
Beispiel für eine qmldir-Datei
Es folgt ein Beispiel für eine qmldir
Datei:
module ExampleModule CustomButton 2.0 CustomButton20.qml CustomButton 2.1 CustomButton21.qml plugin examplemodule MathFunctions 2.0 mathfuncs.js
Die obige Datei qmldir
definiert ein Modul namens "ExampleModule". Sie definiert den CustomButton
QML-Objekttyp in den Versionen 2.0 und 2.1 des Moduls, mit unterschiedlichen Implementierungen für jede Version. Sie spezifiziert ein Plugin, das von der Engine geladen werden muss, wenn das Modul von Clients importiert wird, und dieses Plugin kann verschiedene C++-definierte Typen im QML-Typsystem registrieren. Auf Unix-ähnlichen Systemen versucht die QML-Engine, libexamplemodule.so
als QQmlExtensionPlugin zu laden, und unter Windows lädt sie examplemodule.dll
als QQmlExtensionPlugin. Schließlich gibt die Datei qmldir
eine JavaScript-Ressource an, die nur verfügbar ist, wenn Version 2.0 oder eine neuere Version (unter derselben Hauptversion) des Moduls importiert wird.
Wenn das Modul im QML-Importpfad installiert ist, könnten Clients das Modul auf folgende Weise importieren und verwenden:
import QtQuick 2.0 import ExampleModule 2.1 Rectangle { width: 400 height: 400 color: "lightsteelblue" CustomButton { color: "gray" text: "Click Me!" onClicked: MathFunctions.generateRandom() > 10 ? color = "red" : color = "gray"; } }
Der oben verwendete Typ CustomButton
würde aus der in der Datei CustomButton21.qml
angegebenen Definition stammen, und die durch den Bezeichner MathFunctions
identifizierte JavaScript-Ressource würde in der Datei mathfuncs.js
definiert werden.
Typbeschreibungsdateien
QML-Module können auf eine oder mehrere Typinformationsdateien in ihrer qmldir
Datei verweisen. Diese haben in der Regel die Erweiterung .qmltypes
und werden von externen Tools gelesen, um Informationen über die in C++ definierten und typischerweise über Plugins importierten Typen zu erhalten.
Als solche haben qmltypes-Dateien keinen Einfluss auf die Funktionalität eines QML-Moduls. Ihr einziger Nutzen besteht darin, dass Tools wie Qt Creator den Benutzern Ihres Moduls Codevervollständigung, Fehlerprüfung und andere Funktionen zur Verfügung stellen können.
Jedes Modul, das QML-Typen in C++ definiert, sollte auch eine Typbeschreibungsdatei enthalten.
Der beste Weg, eine qmltypes-Datei für Ihr Modul zu erstellen, ist, sie mit dem Build-System und den QML_ELEMENT -Makros zu erzeugen. Wenn Sie die Dokumentation dazu befolgen, sind keine weiteren Maßnahmen erforderlich. qmltyperegistrar wird die .qmltypes
Dateien automatisch erzeugen.
Beispiel: Wenn sich Ihr Modul in /tmp/imports/My/Module
befindet, sollte neben dem eigentlichen Plugin-Binary eine Datei namens plugins.qmltypes
erzeugt werden.
Fügen Sie die Zeile
typeinfo plugins.qmltypes
zu /tmp/imports/My/Module/qmldir
hinzu, um es zu registrieren.
© 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.