文档章节

QML Image获取资源路径的细节

41245110
 41245110
发布于 2015/02/14 00:23
字数 958
阅读 136
收藏 4

ML是门相当新的UI描述语言,因此在文档上总难免有疏漏之处,如果因此产生了bug,则就需要花费大量的时间去排查。

在最近笔者使用QML的过程中,在Image获取资源路径的细节上就出现了这样的情况。

Image 是qml中一个非常普通的元素,通常使用方法如下:

Image {  width: 120; height: 120  fillMode: Image.TileHorizontally  smooth: true  source: "qtlogo.png"  }

其中,source指的Image元素获取资源的url路径,这个url可以是本地的绝对路径或者相对路径,也可以是qt资源系统的路径,甚至是网络资源的路径。

正是这个看起来不起眼的路径,却会带来跟预期想之外的结果,并且,仅仅从代码上来看,没有半点错误的地方。

要了解这种情况的出现,应该要知道qml的两种使用方式:

1.暴露QML源码的使用方法,即不对QML文件进行处理,存放在可执行文件的目录下,使用QtDeclarative模块动态载入,一般适合以开源程序;

2.混淆QML源码的使用方法,即将QML文件加入到qt资源系统,编译成二进制文件供QtDeclarative模块使用,这样的好处,是可以隐藏代码,供商业项目使用。

在前种的使用方式中,Image元素对于读取资源路径正确无误,在Mac.OS.X,Ubuntu和windows平台上表示一致,但是后者,却出现了不同。

假设Image以如下代码使用:

QML是门相当新的UI描述语言,因此在文档上总难免有疏漏之处,如果因此产生了bug,则就需要花费大量的时间去排查。

在最近笔者使用QML的过程中,在Image获取资源路径的细节上就出现了这样的情况。

Image 是qml中一个非常普通的元素,通常使用方法如下:

property url imageUrl: ""  Image {  width: 120; height: 120  fillMode: Image.TileHorizontally  smooth: true  source: imageUrl == "" : "xx/me/My Data/picture.jpg" ? "resource/qtlogo.png"  }

QML代码段所在的QML文件和qtlogo都处在qt资源系统中,xx/me/My  Data/picture.jpg则值的是三个系统下实际的绝对路径,这是很异常的情况发生了。

在windows下Image的表现很正常,但是在Ubuntu下,却无法正常显示系统路径中的图片picure.jpg,一个代码显示出不同的结果来是相当费解的事,但是事实确很简单,这个source提供Url的写法是错误的,一个错误的代码自然会出现异常情况。

当QML处在qt 资源系统中,它获取图片的路径自然也是去qt资源系统中获得了,也就是说上述的两个路径变成了qrc:xx/me/My   Data/picture.jpg和qrc:resource/qtlogo.png,前者根本不在资源系统内,自然就不会显示了。

当然,对这样的情况自然有正确的解决办法,那就是对前者路径的使用应该使用file:///xx/me/My  Data/picture.jpg,这样QML才会正常解析为本地文件的路径。

至此,对于Image 资源路径可以总结出三个规律:

1.在没用使用qt资源系统时,Image的路径可以是绝对或者相对,并不需要特殊的表示;

2.当使用qt资源系统时,如果要特定知指向本地路径中的图片资源,那就要使用file://标示;

3.当获取网络图片资源并使用使用qt资源系统,由于有http表示存在,QML会自然去除qrc:标示。

其中第三点文中并没有说明,但是有兴趣的同学可以去试试。


本文转载自:http://mobile.51cto.com/symbian-261878.htm

共有 人打赏支持
41245110
粉丝 0
博文 28
码字总数 2842
作品 0
南通
加载中

评论(1)

notvue
notvue
学习下
QML Image获取资源路径的细节

QML是门相当新的UI描述语言,因此在文档上总难免有疏漏之处,如果因此产生了bug,则就需要花费大量的时间去排查。 在最近笔者使用QML的过程中,在Image获取资源路径的细节上就出现了这样的情...

鉴客
2011/12/03
1K
0
qml component is not ready

困扰很久的Component is not ready问题,网络上有很多种介绍的解决办法,但是都是未能真正的解决问题。现在就根据本人的使用情况简单的讨论分析。 提示Component is not ready有以下几种情况...

洋碱
06/13
0
0
QML程序的发布

最近用C++和QML写了一个音乐播放器Clean Player,前前后后遇到不少问题,好在现在基本解决了,现在先总结下QML程序的发布。 QML文件加载可用绝对路径和相对路径,建议将.qml文件加载到资源文件...

dios51
2014/06/18
0
0
Qt使用教程创建移动应用程序(二)

<Qt Enterprise最新版下载> 创建Accelbubble主视图 当您倾斜设备时应用程序的主视图会显示一个SVG泡沫图像在屏幕上移动。为了在项目中使用Bluebubble.svg,您可以将其复制到项目目录中(QML...

Miss_Hello_World
2016/01/06
21
0
Qt Quick里的图形效果——渐变(Gradient)

Qt Quick提供了三种渐变图形效果: ConicalGradient,锥形渐变 LinearGradient,线性渐变 RadialGradient,径向渐变 效果 下图是我设计的示例效果: 图 1 渐变图形效果 如图所示,第一行为线...

foruok
2015/01/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
54分钟前
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
11
1
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0
谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linux-tao
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部