您的位置:首页 > 编程语言 > Qt开发

关于在资源中的QML文件中访问本地Image文件(Qt的Bug)

2011-12-20 20:51 155 查看
这里要讨论的内容是,将一个 QML 文件放置到 qrc 资源中后,需要访问本地目录的文件,比如图片的时候,遇到的一个在 Windows 和 Linux(MeeGo)平台下表现不一致的 Bug,以及处理方法。

事件起因:

一个在资源文件中的 QML 需要引用本地的图片资源。在 PC(Windows)下面运行正常,但是下到手机就是不工作,开启调试模式,发现手机里的 QML 去 qrc:/home/user/image/ 目录下面去找制定的文件去了(应该是 /home/user/image/ 目录),并报错说找不到文件,这个路径前面多出的 qrc: 显然是错误的,但是明明指定的 /home
目录怎么就跑到 qrc:/home 去了呢,这个 qrc 前缀是怎么加上的呢?

在电脑上面运行程序的时候没有出现问题,更加奇怪,在网上搜罗一番,感谢强大的网友,已经有了回答(参考文末链接「QML Image获取资源路径的细节」):

将 QML 文件放入资源后,可以不受影响的访问 qrc 资源中的文件和网络上的图片文件,但是如果访问本地文件,则会遇到 Qt 的一个 Bug,即在非 Windows 的平台上直接访问路径会变成 qrc 资源文件里的路径,从而出现找不到路径的错误。

看一下这篇文章的时间,2011年5月,也就是说Qt的这个Bug在至少半年前就一直存在了,到现在还没修改!


这里摘抄原文的一段结论:

对于Image 资源路径的三个规律:

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

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

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

是不是在路径前面直接加 file:// 就解决问题了呢,经尝试,No。在非Windows环境才需要加,在Windows下加上之后又出现找不到文件的错误。

要解决这个问题就必须引入 Qt 中关于平台相关代码的几个宏了,常用的有:

Q_OS_LINUX
Q_OS_MAC
Q_OS_SYMBIAN
Q_OS_WIN32
Q_WS_X11
Q_WS_MAC
Q_WS_WIN
Q_WS_S60

Q_OS_ 是指定适用的操作系统,Q_WS_ 是指定适用的窗口系统,一般选其中一种即可,具体的用法略去,普通C++宏。

参考链接:

QML Image获取资源路径的细节

http://mobile.51cto.com/symbian-261878.htm

Qt:平台相关的代码写法

http://blog.csdn.net/hufeng825/article/details/5748680
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐