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:

import "../mycomponents"

DialogBox {
    CheckBox {
        // ...
    }
    Slider {
        // ...
    }
}

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:

BefehlSyntaxBeschreibung
Objekttyp-Deklaration<TypName> <Dateiname>Eine Objekttyp-Deklaration ermöglicht die Darstellung eines QML-Dokuments mit dem angegebenen <TypeName>.

Beispiel:

RoundedButton RoundedBtn.qml
Interne Objekttyp-Deklarationintern <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.