找回密码
 立即注册
收起左侧

Qt学习之路第9篇 资源文件

16
回复
32729
查看
[复制链接]
累计签到:3 天
连续签到:1 天
来源: 2013-9-8 20:30:19 显示全部楼层 |阅读模式
版权声明
该文章原创于Qter开源社区(www.qter.org),作者devbean,博客www.devbean.net转载请注明出处!



上一章节中我们介绍了如何使用 QAction 添加动作。其中,我们使用 QIcon 加载了一张 png 图片。那时候我们使用的是 Qt 资源文件。现在我们来仔细了解下 Qt 的资源系统。


Qt 资源系统是一个跨平台的资源机制,用于将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。如果你的程序需要加载特定的资源(图标、文本翻译等),那么,将其放置在资源文件中,就再也不需要担心这些文件的丢失。也就是说,如果你将资源以资源文件形式存储,它是会编译到可执行文件内部。


使用 Qt Creator 可以很方便地创建资源文件。我们可以在工程上点右键,选择“添加新文件…”,可以在 Qt 分类下找到“Qt 资源文件”:





点击“选择…”按钮,打开“新建 Qt 资源文件”对话框。在这里我们输入资源文件的名字和路径:





点击下一步,选择所需要的版本控制系统,然后直接选择完成。我们可以在 Qt Creator 的左侧文件列表中看到“资源文件”一项,也就是我们新创建的资源文件:





右侧的编辑区有个“添加”,我们首先需要添加前缀,比如我们将前缀取名为 images。然后选中这个前缀,继续点击添加文件,可以找到我们所需添加的文件。这里,我们选择 document-open.png 文件。当我们完成操作之后,Qt Creator 应该是这样子的:





接下来,我们还可以添加另外的前缀或者另外的文件。这取决于你的需要。当我们添加完成之后,我们可以像前面一章讲解的那样,通过使用 : 开头的路径来找到这个文件。比如,我们的前缀是 /images,文件是 document-open.png,那么就可以使用 :/images/document-open.png 找到这个文件。



这么做带来的一个问题是,如果以后我们要更改文件名,比如将 docuemnt-open.png 改成 docopen.png,那么,所有使用了这个名字的路径都需要修改。所以,更好的办法是,我们给这个文件去一个“别名”,以后就以这个别名来引用这个文件。具体做法是,选中这个文件,添加别名信息:





这样,我们可以直接使用 :/images/doc-open 引用到这个资源,无需关心图片的真实文件名。



如果仔细观察,还会看到资源编辑窗口最下方有一个“语言”。这个可以对资源进行国际化。比如我们新建一个前缀,将语言设置为 fr,再添加一个文件 document-open-fr.png:





我们可以使用 :/images/fr/doc-open 引用到 document-open-fr.png 这个文件。这个“语言”的作用是,如果 Qt 发现,本机的本地化信息是 fr 的话(QLocale::system().name() 返回 fr_FR),则使用 :/images/fr/doc-open 这个图片;如果不是,则默认使用 :/images/doc-open 这个。



如果我们使用文本编辑器打开 res.qrc 文件,就会看到一下内容:

  1. <RCC>
  2.     <qresource prefix="/images">
  3.         <file alias="doc-open">document-open.png</file>
  4.     </qresource>
  5.     <qresource prefix="/images/fr" lang="fr">
  6.         <file alias="doc-open">document-open-fr.png</file>
  7.     </qresource>
  8. </RCC>
复制代码

我们可以对比一下,看看 Qt Creator 帮我们生成的是怎样的 qrc 文件。当我们编译工程之后,我们可以在构建目录中找到 qrc_res.cpp 文件,这就是 Qt 将我们的资源编译成了 C++ 代码。










本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
参与人数 2人气 +4 收起 理由
zkl123456 + 2 对我帮助很大!
苍卒卒 + 2 很详细!

查看全部评分总评分 : 人气 +4

回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2018-8-30 11:34:42 显示全部楼层
document-open.png这个文件找不到,谁能说一下在哪里找到的
回复 支持 1 反对 0

使用道具 举报

累计签到:10 天
连续签到:1 天
2017-7-16 14:53:26 显示全部楼层
我觉得前辈应该把具体怎么在主函数里引用这个函数写出来的
回复 支持 0 反对 1

使用道具 举报

累计签到:15 天
连续签到:1 天
2015-8-10 16:27:11 显示全部楼层
haha:):):):)
回复 支持 反对

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-8-25 11:15:33 显示全部楼层
继续学习学习,讲解的很好。谢谢前辈啊
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2016-8-26 17:53:38 显示全部楼层
有一处错误,多语言支持仅仅加语言项即可,例如zh, zh_CN,无需在前缀后加/fr.否则本地语言是fr的话找不到响应语言下的文件。大家可以试下。
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2016-8-26 17:54:42 显示全部楼层
<RCC>
    <qresource prefix="/images">
        <file alias="doc-open">document-open.png</file>
    </qresource>
    <qresource prefix="/images" lang="fr">
        <file alias="doc-open">document-open-fr.png</file>
    </qresource>
</RCC>
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-9-28 23:40:58 显示全部楼层
为什么我用了你的方法弄还是显示不出来呢
回复 支持 反对

使用道具 举报

累计签到:10 天
连续签到:1 天
2017-8-18 21:55:13 显示全部楼层
感谢前辈!目前准大二...学前辈的博客比我学其他一本教材快多了
回复 支持 反对

使用道具 举报

累计签到:2 天
连续签到:1 天
2018-3-6 21:12:49 显示全部楼层
图标改成你这地址就显示不出了
回复 支持 反对

使用道具 举报

累计签到:11 天
连续签到:1 天
2018-8-28 14:40:26 显示全部楼层
本帖最后由 owenmsd9880 于 2018-8-29 17:01 编辑

解决问题了,有2个TIPS给后来的同学。
1.文件路径,必须全英文,不管是项目的路径还是 .QRC的路径。

一开始失败好多次就是生成 QRC的路径有中文。

2,不要摁左上角的新建文件,这个选了QRC不能挂到项目里。对着项目菜单里 的文件夹摁 右键新建QRC。

回复 支持 反对

使用道具 举报

尚未签到

2018-11-14 10:52:46 显示全部楼层
本帖最后由 ycl1729020039 于 2018-11-14 10:54 编辑

图标必须是png图片格式才能正确显示
回复 支持 反对

使用道具 举报

尚未签到

2019-3-5 15:11:15 显示全部楼层
zg58301 发表于 2018-8-30 11:34
**** 作者被禁止或删除 内容自动屏蔽 ****

请问您找到这个文件了吗?我也没找到。。
回复 支持 反对

使用道具 举报

尚未签到

2019-4-15 23:21:27 显示全部楼层
好像图标图片加载不出来确实是因为qmake才导致qrc文件没被加载。
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2019-9-6 08:17:58 显示全部楼层
zg58301 发表于 2018-8-30 11:34
**** 作者被禁止或删除 内容自动屏蔽 ****

我是在安装目录里搜索到的,你也可以试试
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2019-9-6 08:19:10 显示全部楼层
原来上一讲的相对路径是这么回事啊
回复 支持 反对

使用道具 举报

累计签到:25 天
连续签到:1 天
2019-9-18 21:27:40 显示全部楼层
zg58301 发表于 2018-8-30 11:34
**** 作者被禁止或删除 内容自动屏蔽 ****

你要自己下载一张图片呀,然后名字取的和这个一样
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了