QML是门适当新的UI描绘言语,因而在文档上总不免有遗漏之处,假如因而产生了bug,则就需要花费很多的时刻去排查。
在最近笔者运用QML的过程中,在Image获取资源途径的细节上就呈现了这样的状况。
Image 是qml中一个十分一般的元素,一般运用方法如下:
1 |
Image { |
2 |
width: 120 ; height: 120 |
3 |
fillMode: Image.TileHorizontally |
4 |
smooth: true |
5 |
source: qtlogo.png |
6 |
} |
其间,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中一个十分一般的元素,一般运用方法如下:
1 |
property url imageUrl:
|
2 |
Image { |
3 |
width: 120 ; height: 120 |
4 |
fillMode: Image.TileHorizontally |
5 |
smooth: true |
6 |
source: imageUrl ==
: xx/me/My Data/picture.jpg ? resource/qtlogo.png |
7 |
} |
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:标明。
其间第三点文中并没有阐明,可是有爱好的同学能够去试试。