Prototyping mit dem QML Runtime -Tool
Das Dienstprogramm „ qml “ dient in erster Linie zum Testen Ihrer QML-Anwendungen und -Komponenten. Um eine QML-Anwendung in einer Produktionsumgebung zu starten, müssen Sie häufig eine benutzerdefinierte C++-Anwendung entwickeln oder die QML-Datei in einem Modul bündeln. Weitere Informationen finden Sie unter „Bereitstellen von QML-Anwendungen “.
qml kann jeden von Ihnen bereitgestellten QML-Typ unverändert instanziieren, auch wenn nichts angezeigt werden soll. Um QML-Inhalte mit einem anderen Root-Objekt als „ Window “ anzuzeigen, verpackt „ qml “ diesen Inhalt in ein „ Window “.
Wenn Sie also von einem mit „ qml “ entwickelten Prototyp zu einer C++-Anwendung wechseln, müssen Sie entweder sicherstellen, dass das Stammelement ein „ Window “ ist, oder in C++ ein „ QQuickView “ erstellen, das das Stamm-„ Item “ enthält. In der Zwischenzeit können Sie jedoch Teile Ihres Prototyps separat mit dem Tool „ qml “ laden und testen.
Um eine .qml-Datei zu laden, geben Sie den Dateipfad in der Befehlszeile an:
$ qml myqmlfile.qmlUm die Konfigurationsoptionen anzuzeigen, führen Sie „ qml “ mit dem Argument „ --help “ aus.
Wenn das Stammobjekt in der QML-Datei, die Sie laden, ein `Item` statt eines `Window` ist, muss es in ein ` Window ` eingeschlossen werden, um angezeigt zu werden. Solange diese Arbeit noch aussteht, wird das bereits geladene Objekt der obersten Ebene durch ein ` PartialScene `-Objekt dargestellt. Das Tool „ qml “ lädt dann zusätzliche QML-Dateien, um zu entscheiden, wie es weitergehen soll: Eine davon ist eine Konfigurationsdatei, die angibt, in welche Art von Container das „ PartialScene “ eingeschlossen werden soll. Die Eigenschaft „ PartialScene.container “ liefert eine URL, die auf den QML-Quellcode für die Container-Komponente verweist, der normalerweise ein „ Window “ deklarieren sollte, in das das zuerst geladene „ Item “ eingeschlossen wird. Somit ist der Vorgang des Einbindens eines „Item“ in ein „Window“ programmierbar; standardmäßig werden diese beiden zusätzlichen QML-Dateien aus den Ressourcen innerhalb der ausführbaren qml-Datei geladen. Mit dem Befehl „ --list-conf “ können Sie die verfügbaren Konfigurationen auflisten:
$ qml --list-conf
Built-in configurations:
default
resizeToItemDie Konfiguration „ default “ bietet das Standardverhalten: Das Root-Item wird beim Start sowie bei einer Größenänderung des Fensters durch den Benutzer so angepasst, dass es das umschließende Fenster ausfüllt. Die alternative Konfiguration „ resizeToItem “ funktioniert umgekehrt: Das „Item“ kann seine Größe programmgesteuert festlegen (beispielsweise durch das Erstellen von Bindungen zu seinen eigenen Eigenschaften „ width “ und „ height “), und das „Wrapper“-Fenster wird entsprechend angepasst (vorbehaltlich etwaiger Einschränkungen, die durch das Fenstersystem auferlegt werden). Sie können eine dieser Optionen mithilfe der Optionen „ -c “ oder „ --config “ auswählen:
$ qml -c resizeToItem selfResizingItem.qmlZusätzliche Konfigurationen können hinzugefügt werden, indem Konfigurationsverzeichnisse unter „ QStandardPaths::AppConfigLocation “ angelegt werden, die jeweils zwei QML-Dateien enthalten: eine Konfigurationsdatei mit dem Namen „ configuration.qml “ und eine QML-Datei, die den Item-Wrapper deklariert, der einen beliebigen Namen haben kann. Wurde dies durchgeführt, listet der Befehl „ qml --list-conf “ auch diese zusätzlichen Konfigurationen auf, während die Option „ --verbose “ diese erweitert, um die vollständigen Pfade zu diesen Konfigurationen sowie die zusätzlich durchsuchten Speicherorte anzuzeigen:
$ qml --list-conf --verbose
Built-in configurations:
default
resizeToItem
Other configurations:
/home/myuser/.config/QtProject/Qml Runtime/simplest
Checked in:
/home/myuser/.config/QtProject/Qml Runtime
/etc/xdg/QtProject/Qml RuntimeHier ist ein Beispiel für eine „ configuration.qml “-Datei:
import QmlRuntime.Config
Configuration {
PartialScene {
itemType: "QQuickItem"
container: Qt.resolvedUrl("ItemWrapper.qml")
}
}Und hier ist die einfachstmögliche Datei „ ItemWrapper.qml “, auf die die Eigenschaft „ container “ verweisen könnte:
import QtQuick
Window {
required property Item containedObject: null
onContainedObjectChanged: {
if (containedObject == undefined || containedObject == null) {
visible = false;
} else {
containedObject.parent = contentItem;
visible = true;
}
}
}Sobald diese Dateien erstellt wurden, können Sie die Option „ qml -c “ verwenden, indem Sie den Namen des Verzeichnisses angeben, das die Datei „ configuration.qml “ enthält, welche den Pfad zum Container-Objekt festlegt:
$ qml -c simplest mycomponent.qmlDie „ qml “-Laufzeitumgebung setzt die Eigenschaft „ containedObject “ direkt – diese muss zwingend diesen Namen tragen; sobald sie gesetzt ist, wird das „ Item “ dem „ Window “ neu zugeordnet und angezeigt. Da dieses Fenster in QML deklariert ist, können Sie beim Erstellen Ihres eigenen Wrapper-Fensters beliebige zusätzliche Funktionen hinzufügen: beispielsweise zur individuellen Anpassung der Größenänderung oder um Funktionen zu integrieren, die Sie beim Prototyping als nützlich erachten.
Unabhängig davon, was unter AppConfigLocation zu finden war, können Sie alternativ die Option „ qml -c “ verwenden, indem Sie den vollständigen Pfad zur Datei „ configuration.qml “ angeben; diese kann wiederum den vollständigen Pfad zum Containerobjekt angeben; somit können sich diese Dateien an beliebiger Stelle befinden.
Zusätzlich zu den Funktionen, die in den Konfigurationsdateien deklariert werden können, bietet das Tool „ qml “ über Befehlszeilenoptionen noch einige weitere Funktionen. Verwenden Sie die Option „ --help “, um eine aktuelle Liste abzurufen.
© 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.