QML-Dokumente
Ein QML-Dokument ist eine Zeichenkette, die der QML-Dokumentensyntax entspricht. Ein Dokument definiert einen QML-Objekttyp. Ein Dokument wird in der Regel aus einer ".qml"
Datei geladen, die entweder lokal oder entfernt gespeichert ist, kann aber auch manuell im Code erstellt werden. Eine Instanz des durch ein Dokument definierten Objekttyps kann mit Hilfe eines Component im QML-Code oder eines QQmlComponent in C++ erstellt werden. Wenn der Objekttyp dem QML-Typsystem explizit mit einem bestimmten Typnamen zur Verfügung gestellt wird, kann der Typ alternativ direkt in Objektdeklarationen in anderen Dokumenten verwendet werden.
Die Möglichkeit, wiederverwendbare QML-Objekttypen in Dokumenten zu definieren, ist ein wichtiger Faktor, der es Kunden ermöglicht, modularen, hochgradig lesbaren und wartbaren Code zu schreiben.
Seit Qt 5.4 kann ein Dokument auch die Dateierweiterung ".ui.qml"
haben. Die QML-Engine behandelt diese Dateien wie normale .qml-Dateien und ignoriert den .ui
Teil der Erweiterung. Qt Design Studio behandelt diese Dateien als UI-Dateien. Die Dateien können nur eine Teilmenge der QML-Sprachfunktionen enthalten.
Struktur eines QML-Dokuments
Ein QML-Dokument besteht aus zwei Abschnitten: dem Abschnitt "Importe" und dem Abschnitt "Objektdeklaration". Der Importabschnitt eines Dokuments enthält Importanweisungen, die festlegen, welche QML-Objekttypen und JavaScript-Ressourcen das Dokument verwenden kann. Der Objektdeklarationsabschnitt definiert den Objektbaum, der bei der Instanziierung des vom Dokument definierten Objekttyps erstellt wird.
Ein Beispiel für ein einfaches Dokument sieht wie folgt aus:
import QtQuick 2.0 Rectangle { width: 300 height: 200 color: "blue" }
Weitere Informationen zu diesem Thema finden Sie unter Struktur eines QML-Dokuments.
Syntax der QML-Sprache
Der Objektdeklarationsabschnitt des Dokuments muss eine gültige Objekthierarchie mit geeigneter QML-Syntax angeben. Eine Objektdeklaration kann die Angabe von benutzerdefinierten Objektattributen enthalten. Objekt-Methodenattribute können als JavaScript-Funktionen angegeben werden, und Objekt-Eigenschaftsattribute können Property-Binding-Ausdrücken zugeordnet werden.
Weitere Informationen über die gültige Syntax finden Sie in der Dokumentation über die Syntax von QML. Ausführliche Informationen zu diesem Thema finden Sie in der Dokumentation über die Integration von QML und JavaScript.
Definieren von Objekttypen durch QML-Dokumente
Wie im vorherigen Abschnitt kurz beschrieben, definiert ein Dokument implizit einen QML-Objekttyp. Eines der Grundprinzipien von QML ist die Möglichkeit, Objekttypen zu definieren und dann wiederzuverwenden. Dies verbessert die Wartbarkeit von QML-Code, erhöht die Lesbarkeit von Objekthierarchiedeklarationen und fördert die Trennung zwischen UI-Definition und Logikimplementierung.
Im folgenden Beispiel definiert der Client-Entwickler einen Typ Button
mit einem Dokument in einer Datei:
// Button.qml import QtQuick Rectangle { width: 100; height: 100 color: "red" MouseArea { anchors.fill: parent onClicked: console.log("Button clicked!") } }
Der Typ Button
kann dann in einer Anwendung verwendet werden:
Ausführliche Informationen zu diesem Thema finden Sie in der Dokumentation zur Definition von Objekttypen in Dokumenten.
Laden von Ressourcen und Netzwerktransparenz
Es ist wichtig zu beachten, dass QML netzwerktransparent ist. Anwendungen können Dokumente aus entfernten Pfaden genauso einfach importieren wie Dokumente aus lokalen Pfaden. Tatsächlich kann jeder Eigenschaft von url
eine entfernte oder lokale URL zugewiesen werden, und die QML-Engine wickelt jede damit verbundene Netzwerkkommunikation ab.
Weitere Informationen zur Netzwerktransparenz bei Importen finden Sie in der Dokumentation Netzwerktransparenz.
Umfang und Namensauflösung
Ausdrücke in Dokumenten beziehen sich in der Regel auf Objekte oder Eigenschaften von Objekten, und da mehrere Objekte definiert sein können und verschiedene Objekte Eigenschaften mit demselben Namen haben können, muss QML einige vordefinierte Semantiken zur Symbolauflösung festlegen. Ausführliche Informationen zu diesem Thema finden Sie auf der Seite über Scope und Symbolauflösung.
© 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.