Importieren von QML-Dokumentenverzeichnissen
Ein lokales Verzeichnis mit QML-Dateien kann ohne zusätzliche Einrichtung oder Konfiguration importiert werden. Ein entferntes Verzeichnis mit QML-Dateien kann ebenfalls importiert werden, setzt aber voraus, dass ein Verzeichnis mit der Datei qmldir
existiert. Ein lokales Verzeichnis kann optional eine Datei mit einer Verzeichnisliste qmldir
enthalten, um die Typnamen zu definieren, die Clients, die das Verzeichnis importieren, zur Verfügung gestellt werden sollen, und um JavaScript-Ressourcen anzugeben, die Importeuren zur Verfügung gestellt werden sollen.
Lokale Verzeichnisimporte
Jede QML-Datei auf dem lokalen Dateisystem kann ein lokales Verzeichnis importieren, indem sie eine Importanweisung verwendet, die sich auf den absoluten oder relativen Dateisystempfad des Verzeichnisses bezieht, so dass die Datei die in diesem Verzeichnis definierten Objekttypen verwenden kann.
Wenn das lokale Verzeichnis eine Verzeichnisliste qmldir
enthält, werden die Typen mit den in der Datei qmldir
angegebenen Typnamen zur Verfügung gestellt; andernfalls werden sie mit Typnamen zur Verfügung gestellt, die von den Dateinamen der QML-Dokumente abgeleitet sind. Nur Dateinamen, die mit einem Großbuchstaben beginnen und mit ".qml" enden, werden als Typen bereitgestellt, wenn keine qmldir
Datei im Verzeichnis angegeben ist.
Verzeichnisimporte haben Vorrang vor allen Modulimporten. Wenn der gleiche Name in einem Modul und in einem Verzeichnis definiert ist, die beide in den gleichen Namensraum importiert werden, wird nur der Typ des Moduls verfügbar gemacht.
Ein Beispiel
Betrachten Sie die folgende Verzeichnisstruktur des QML-Projekts. Unter dem obersten Verzeichnis myapp
befindet sich eine Reihe von gemeinsamen UI-Komponenten in einem Unterverzeichnis namens mycomponents
und der Hauptanwendungscode in einem Unterverzeichnis namens main
:
myapp |- mycomponents |- CheckBox.qml |- DialogBox.qml |- Slider.qml |- main |- application.qml
Die Datei main/application.qml
kann das Verzeichnis mycomponents
unter Verwendung des relativen Pfads zu diesem Verzeichnis importieren, so dass sie die in diesem Verzeichnis definierten QML-Objekttypen verwenden kann:
Das Verzeichnis kann in einen qualifizierten lokalen Namensraum importiert werden; in diesem Fall müssen die Verwendungen aller im Verzeichnis bereitgestellten Typen qualifiziert werden:
import "../mycomponents" as MyComponents MyComponents.DialogBox { // ... }
Die Möglichkeit, ein lokales Verzeichnis zu importieren, ist praktisch für Fälle wie anwendungsinterne Komponentensätze und Anwendungsprototyping, obwohl jeder Code, der solche Module importiert, seine relevanten import
Anweisungen aktualisieren muss, wenn das Modulverzeichnis an einen anderen Ort verschoben wird. Dies kann vermieden werden, wenn stattdessen QML-Module verwendet werden, da ein installiertes Modul mit einer eindeutigen Identifizierungszeichenfolge und nicht mit einem Dateisystempfad importiert wird.
Der implizite Import
Das Verzeichnis, in dem sich ein QML-Dokument befindet, wird automatisch importiert. Sie müssen nicht explizit "."
oder ähnliches importieren.
Hinweis: Sie sollten sicherstellen, dass die qmldir-Datei, die das Modul angibt, zu dem ein QML-Dokument gehört, im selben Verzeichnis liegt wie das QML-Dokument selbst. Andernfalls ist der implizite Import ein anderer als das Modul, zu dem das Dokument gehört. Dann kann z.B. ein anderes QML-Dokument im Kontext des Moduls ein Singleton sein, im Kontext des impliziten Imports aber kein Singleton. Dies ist eine häufige Fehlerquelle.
Entfernt liegende Verzeichnisse
Ein Verzeichnis mit QML-Dateien kann auch von einem entfernten Standort aus importiert werden, wenn das Verzeichnis eine Verzeichnisauflistung qmldir
Datei enthält.
Hinweis: Dies gilt auch für den impliziten Import des Verzeichnisses, in dem sich ein QML-Dokument befindet. Wenn Ihre QML-Dokumente von einem entfernten Ort geladen werden, müssen Sie qmldir-Dateien hinzufügen, auch wenn sie keine expliziten Verzeichnisimport-Anweisungen enthalten. Andernfalls können sich Ihre QML-Dokumente gegenseitig nicht sehen.
Wenn beispielsweise das Verzeichnis myapp
im vorigen Beispiel unter "http://www.my-example-server.com" gehostet wird und das Verzeichnis mycomponents
eine Datei qmldir
enthält, die wie folgt definiert ist:
CheckBox CheckBox.qml DialogBox DialogBox.qml Slider Slider.qml
Dann könnte das Verzeichnis über die URL zum entfernten Verzeichnis mycomponents
importiert werden:
import "http://www.my-example-server.com/myapp/mycomponents" DialogBox { CheckBox { // ... } Slider { // ... } }
Beachten Sie, dass eine Datei, die ein Verzeichnis über ein Netzwerk importiert, nur auf die QML- und JavaScript-Dateien zugreifen kann, die in der Datei qmldir
in diesem Verzeichnis angegeben sind.
Warnung: Beim Importieren von Verzeichnissen von einem entfernten Server sollten Entwickler immer darauf achten, nur Verzeichnisse aus vertrauenswürdigen Quellen zu laden, um das Laden von schädlichem Code zu vermeiden.
Verzeichnisauflistung qmldir-Dateien
Eine Verzeichnisauflistungsdatei qmldir
unterscheidet sich deutlich von einer Moduldefinitionsdatei qmldir. Eine Verzeichnisauflistung qmldir
ermöglicht es, eine Gruppe von QML-Dokumenten schnell und einfach gemeinsam zu nutzen, aber sie definiert keinen Typ-Namensraum, in dem die von den Dokumenten definierten QML-Objekttypen registriert werden, noch unterstützt sie die Versionierung dieser QML-Objekttypen.
Die Syntax einer Verzeichnisauflistungsdatei qmldir
lautet wie folgt:
Befehl | Syntax | Beschreibung |
---|---|---|
Objekttyp-Deklaration | <TypName> <Dateiname> | Eine Objekttyp-Deklaration ermöglicht die Darstellung eines QML-Dokuments mit dem angegebenen <TypeName> .Beispiel: RoundedButton RoundedBtn.qml |
Interne Objekttyp-Deklaration | intern <Typname> <Dateiname> | Eine interne Objekttypdeklaration ermöglicht es, ein QML-Dokument als Typ zu registrieren, der nur für die anderen im Verzeichnisimport enthaltenen QML-Dokumente verfügbar ist. Der interne Typ wird den Clients, die das Verzeichnis importieren, nicht zur Verfügung gestellt. Beispiel: internal HighlightedButton HighlightedBtn.qml |
JavaScript-Ressourcen-Deklaration | <Bezeichner> <Dateiname> | Eine JavaScript-Ressourcen-Deklaration ermöglicht es, eine JavaScript-Datei über den angegebenen Bezeichner freizulegen. Beispiel: MathFunctions mathfuncs.js |
Ein lokales Dateisystemverzeichnis kann optional eine qmldir
Datei enthalten. Dies ermöglicht es der Engine, nur bestimmte QML-Typen für Clients zugänglich zu machen, die das Verzeichnis importieren. Außerdem werden die JavaScript-Ressourcen im Verzeichnis den Clients nicht angezeigt, es sei denn, sie sind in einer qmldir
-Datei deklariert.
© 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.