Importieren von QML-Dokumentverzeichnissen
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, erfordert jedoch das Vorhandensein einer Verzeichnisauflistungs qmldir -Datei. Ein lokales Verzeichnis kann optional eine Verzeichnisauflistungs- qmldir -Datei enthalten, um die Typnamen zu definieren, die den Clients, die das Verzeichnis importieren, bereitgestellt werden sollen, und um JavaScript-Ressourcen anzugeben, die den Importeuren zur Verfügung gestellt werden sollen.
Qt geht davon aus, dass alle Dateien im importierten Verzeichnis aus einer vertrauenswürdigen Quelle stammen.
Importe lokaler Verzeichnisse
Jede QML-Datei auf dem lokalen Dateisystem kann ein lokales Verzeichnis mithilfe einer „import“-Anweisung importieren, die auf den absoluten oder relativen Dateisystempfad des Verzeichnisses verweist, wodurch die Datei die in diesem Verzeichnis definierten Objekttypen nutzen kann.
Die QML Runtime liest eine optionale Verzeichnisauflistungsdatei „ qmldir “ aus dem importierten Verzeichnis ein, um die in QML und C++ definierten verfügbaren Typen zu ermitteln. Die Datei „ qmldir “ gibt die Namen der in QML definierten Typen sowie die Pfade der Plugins an, die in C++ definierte Typen enthalten.
QML-Dateien werden mit den in der Datei „ qmldir “ angegebenen Typnamen bereitgestellt, sofern eine solche Datei vorhanden ist; andernfalls werden sie mit Typnamen bereitgestellt, die aus den Dateinamen der QML-Dokumente abgeleitet werden. Nur Dateinamen, die mit einem Großbuchstaben beginnen und auf „.qml“ enden, werden als Typen bereitgestellt, wenn im Verzeichnis keine „ qmldir “-Datei angegeben ist.
Die QML Runtime lädt alle in der Datei „ qmldir “ aufgeführten Plugins, um alle von C++ bereitgestellten Typen zu ermitteln.
Verzeichnisimporte haben eine geringere Priorität als alle Modulimporte. Wenn derselbe Name in einem Modul und in einem Verzeichnis definiert ist, die beide in denselben Namensraum importiert werden, wird nur der Typ des Moduls zur Verfügung gestellt.
Ein Beispiel
Betrachten Sie die folgende Verzeichnisstruktur eines QML-Projekts. Unter dem obersten Verzeichnis „ myapp “ befinden sich eine Reihe gängiger UI-Komponenten in einem Unterverzeichnis namens „ mycomponents “ sowie der Hauptanwendungscode in einem Unterverzeichnis namens „ main “, wie folgt:
myapp
|- mycomponents
|- CheckBox.qml
|- DialogBox.qml
|- Slider.qml
|- main
|- application.qmlDie Datei „ main/application.qml “ kann das Verzeichnis „ mycomponents “ über den relativen Pfad zu diesem Verzeichnis importieren, wodurch die darin definierten QML-Objekttypen verwendet werden können:
Das Verzeichnis kann in einen qualifizierten lokalen Namensraum importiert werden; in diesem Fall muss die Verwendung aller in dem 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 die Erstellung von Anwendungsprototypen, allerdings muss jeder Code, der solche Module importiert, die entsprechenden „ import “-Anweisungen aktualisieren, wenn das Modulverzeichnis an einen anderen Speicherort verschoben wird. Dies lässt sich vermeiden, wenn stattdessen QML-Module verwendet werden, da ein installiertes Modul mit einer eindeutigen Kennungszeichenfolge statt mit einem Dateisystempfad importiert wird.
Der implizite Import
Das Verzeichnis, in dem sich ein QML-Dokument befindet, wird automatisch importiert. Sie müssen ` "." ` oder Ähnliches nicht explizit importieren.
Hinweis: Sie sollten sicherstellen, dass sich die Datei „qmldir“, die das Modul angibt, zu dem ein QML-Dokument gehört, im selben Verzeichnis befindet wie das QML-Dokument selbst. Andernfalls weicht der implizite Import von dem Modul ab, zu dem das Dokument gehört. Dann kann beispielsweise ein anderes QML-Dokument im Kontext des Moduls ein Singleton sein, im Kontext des impliziten Imports jedoch kein Singleton. Dies ist eine häufige Fehlerquelle.
Remote-Verzeichnisse
Ein Verzeichnis mit QML-Dateien kann auch von einem entfernten Speicherort importiert werden, wenn das Verzeichnis eine Verzeichnisauflistungs 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 Speicherort geladen werden, müssen Sie qmldir-Dateien hinzufügen, auch wenn diese keine expliziten Verzeichnisimportanweisungen enthalten. Andernfalls können Ihre QML-Dokumente einander nicht erkennen.
Wenn beispielsweise das Verzeichnis „ myapp “ aus dem vorherigen Beispiel unter „http://www.my-example-server.com“ gehostet wurde und das Verzeichnis „ mycomponents “ eine wie folgt definierte „ qmldir “-Datei enthielt:
CheckBox CheckBox.qml
DialogBox DialogBox.qml
Slider Slider.qmlDann 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 QML- und JavaScript-Dateien zugreifen kann, die in der Datei „ qmldir “ in diesem Verzeichnis angegeben sind.
Warnung: Beim Importieren von Verzeichnissen von einem Remote-Server sollten Entwickler stets darauf achten, nur Verzeichnisse aus vertrauenswürdigen Quellen zu laden, um das Laden von Schadcode zu vermeiden.
Verzeichnisauflistung in qmldir-Dateien
Eine Verzeichnisauflistungsdatei „ qmldir “ unterscheidet sich deutlich von einer Moduldefinitionsdatei „qmldir“. Eine Verzeichnisauflistungsdatei „ qmldir “ ermöglicht die schnelle und einfache Freigabe einer Gruppe von QML-Dokumenten, definiert jedoch weder einen Typ-Namespace, in dem die durch die Dokumente definierten QML-Objekttypen registriert werden, noch unterstützt sie die Versionierung dieser QML-Objekttypen.
Die Syntax einer Verzeichnisliste-Datei „ qmldir “ lautet wie folgt:
| Befehl | Syntax | Beschreibung |
|---|---|---|
| Objekttyp-Deklaration | <Typname> <Dateiname> | Eine Objekttyp-Deklaration ermöglicht es, ein QML-Dokument mit dem angegebenen „ <TypeName> “ verfügbar zu machen.Beispiel: |
| Interne Objekttyp-Deklaration | internal <TypeName> <FileName> | Eine interne Objekttyp-Deklaration ermöglicht es, ein QML-Dokument als Typ zu registrieren, der nur für die anderen im Verzeichnis „import“ enthaltenen QML-Dokumente verfügbar ist. Der interne Typ wird Clients, die das Verzeichnis importieren, nicht zur Verfügung gestellt. Beispiel: |
| JavaScript-Ressourcendeklaration | <Bezeichner> <Dateiname> | Eine JavaScript-Ressourcendeklaration ermöglicht es, eine JavaScript-Datei über den angegebenen Bezeichner verfügbar zu machen. Beispiel: |
Ein Verzeichnis im lokalen Dateisystem kann optional eine „ qmldir “-Datei enthalten. Dadurch kann die Engine bestimmte QML-Typen nur für Clients bereitstellen, die das Verzeichnis importieren. Außerdem werden JavaScript-Ressourcen in dem Verzeichnis den Clients erst dann bereitgestellt, wenn sie in einer „ qmldir “-Datei deklariert wurden.
© 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.