Prototyping mit dem Tool QML Runtime

Qt enthält die ausführbare Datei qml, ein Dienstprogramm zum Laden und Anzeigen von QML-Dokumenten.

Das Dienstprogramm qml ist hauptsächlich für das Testen Ihrer QML-Anwendungen und -Komponenten gedacht. 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. Bei einem bloßen Item als Root-Element erstellt qml automatisch ein Fenster, um die Szene anzuzeigen. QQmlComponent::create () wird dies nicht tun. Wenn Sie also von einem mit qml entwickelten Prototyp zu einer C++-Anwendung wechseln, müssen Sie entweder sicherstellen, dass das Wurzelelement ein Window ist, oder ein QQuickView in C++ erstellen, um das Wurzelelement Item aufzunehmen. 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 an der Eingabeaufforderung an:

$ qml myqmlfile.qml

Um die Konfigurationsoptionen zu sehen, führen Sie qml mit dem Argument --help aus.

Wenn das Stammobjekt in der QML-Datei, die Sie laden, ein Element und kein Fenster ist, muss es in ein Fenster eingeschlossen werden, um angezeigt zu werden. Während dies geschieht, wird das bereits geladene Top-Level-Objekt durch ein PartialScene -Objekt dargestellt. Das Werkzeug qml lädt dann weitere QML-Dateien, um zu entscheiden, was als Nächstes zu tun ist: Eine davon ist eine Konfigurationsdatei, die angibt, in welche Art von Container das PartialScene verpackt werden soll. Die Eigenschaft PartialScene.container gibt eine URL an, die auf den QML-Quellcode für die Containerkomponente verweist, die normalerweise eine Window deklarieren sollte, in die das zuerst geladene Item verpackt werden soll. Somit ist der Prozess des Einpackens eines Elements in ein Fenster programmierbar; und standardmäßig werden diese beiden zusätzlichen QML-Dateien aus Ressourcen innerhalb der ausführbaren qml-Datei geladen. Sie können die verfügbaren Konfigurationen mit dem Befehl --list-conf auflisten:

$ qml --list-conf
Built-in configurations:
  default
  resizeToItem

Die Konfiguration default bietet das Standardverhalten: Das Root-Element wird beim Start so angepasst, dass es das Wrapper-Fenster ausfüllt, und auch, wenn der Benutzer die Größe des Fensters ändert. Die alternative Konfiguration resizeToItem funktioniert umgekehrt: Das Element kann seine eigene Größe programmatisch festlegen (z. B. durch Erstellen von Bindungen zu seinen eigenen Eigenschaften width und height ), und das Wrapper-Fenster wird so angepasst, dass es passt (vorbehaltlich aller Beschränkungen, die vom Fenstersystem auferlegt werden können). Sie können eine der beiden Möglichkeiten mit der Option -c oder --config wählen:

$ qml -c resizeToItem selfResizingItem.qml

Zusätzliche Konfigurationen können hinzugefügt werden, indem Sie Konfigurationsverzeichnisse in QStandardPaths::AppConfigLocation erstellen, 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. Wenn dies geschehen ist, 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 und die zusätzlichen Orte, die durchsucht wurden, anzugeben:

$ 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 Runtime

Hier 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 einfachste mögliche ItemWrapper.qml, auf die die Eigenschaft container zeigen könnte:

import QtQuick

Window {
    required property Item containedObject: null
    onContainedObjectChanged: {
        if (containedObject == undefined || containedObject == null) {
            visible = false;
        } else {
            containedObject.parent = contentItem;
            visible = true;
        }
    }
}

Wenn diese Dateien erstellt wurden, können Sie die Option qml -c verwenden, die den Namen des Verzeichnisses angibt, das die Datei configuration.qml enthält, die den Pfad zum Containerobjekt angibt:

$ qml -c simplest mycomponent.qml

Die Laufzeit von qml wird direkt die Eigenschaft containedObject setzen, die diesen Namen haben muss; und wenn sie gesetzt ist, wird Item auf Window reparentiert und angezeigt. Da dieses Fenster in QML deklariert ist, können Sie, wenn Sie Ihr eigenes Wrapper-Fenster schreiben, alle zusätzlichen Funktionen hinzufügen, die Sie wünschen: die Größenanpassung auf eine angepasste Art und Weise zu handhaben oder Fähigkeiten hinzuzufügen, die Sie während des Prototypings nützlich finden.

Unabhängig davon, was in AppConfigLocation gefunden wurde, können Sie alternativ die Option qml -c verwenden, die den vollständigen Pfad zur Datei configuration.qml angibt, die wiederum den vollständigen Pfad zum Container-Objekt angeben kann; diese Dateien können sich also überall befinden.

Zusätzlich zu den Funktionen, die in den Konfigurationsdateien deklariert werden können, bietet das Werkzeug qml auch einige weitere Funktionen über Befehlszeilenoptionen. Verwenden Sie die Option --help, um eine aktuelle Liste zu erhalten.

© 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.