Qt RCC资源机制
其实这几个月一直在偷懒, 不学无术, 经常刷纪录片和某乎以及在B站刷科普视频,给自己造成了一种”我在学习的错觉”. 然而可啪的就在我明明已经意识到本菜鸡即将面临就业,这个时候应该写代码才对,但是还是各种偷懒. 终于最近两日如鲠在喉, 偷懒的时候莫名会想到未写完的代码…想到N个月没更新的小说,设定. 以及自己的gayhub…
我决定开始对抗懒癌..祝自己坚挺一点.
我的大多数博客都是写给我自己怕我忘了的, 对没错, 这就是我文风傻逼的理由…本语言表达障碍人士尽力讲明白..
于是我开始接着填坑, 说起来傻逼, 我用了这么长时间Qt,一直是属于瞎子摸象的境界. 是最近两天才知道QRC那玩意是编译在程序里头的. 其实Qt文档上写的清清楚楚,还有图. 奈何本傻逼压根就没去瞅, 也没咋仔细看文档….活该瞎
填坑的时候因为需要完成一个需求才发现的…而且编译qrc奇吃内存,而且程序运行起来占用也大, 我测试了一下我的QRC中包含了50MB的图片..编译的时候我8G小内存分分钟爆了..于是我看了一眼我的qmake. 我已经在里面写了:
这段代码的作用是每次代码被编译的时候,根据qrc.qrc
这个QRC文件编译(编译一词可能不准确,词穷了)一个Qt的RCC文件: qrc.rcc
. 这样可以避免由删减QRC造成的与RCC文件不匹配的情况. (关于命令参数请务必查看:http://doc.qt.io/archives/qt-4.8/resources.html)
说一下RCC: 以我羸弱的理解力来理解.RCC就像是把你放在QRC里头的东西打了一个包一样, 这样就方便你在各个平台上使用. 按照以上那种在Qmake里生成RCC的方法, 虽然避免了一个问题, 但是啊…如果QRC中文件过大的话…那还是会爆内存啊啊啊啊! 所以以上生成RCC方案请酌情服用.
那么让我们谨慎一些: 先把QRC准备好, 然后用Qt的命令行工具打包好RCC. 然后过河拆桥RCC已经备好了QRC随便处置就好.吼开始行动, 首先准备好你的QRC, 我们要以它为基准, 该塞的文件都塞进去. 接着召唤Qt的命令行工具,在你配置好Qt的全局变量情况下,点开开始里的搜索/戳一下你的小娜直接搜Qt一般就能出来,你用的哪个编译器就用哪个版本的命令行工具这就不用我废话了. 接着CD到QRC存在目录, 输入:rcc -no-compress -binary qrc.qrc -o qrc.rcc
, QRC和RCC文件名根据自己的改一下. 回车,然后你的目录里就会出现一个XXX.rcc的文件, 吼就是他. 接着把之前的QRC处理一下, 你是删除啊还是减少里头的文件啊总之别爆内存就好.
对,机智又漂亮帅气的你一定马上就想到了一个问题:”只要我QRC里头的东西变了一点,想要使改变生效的话,一定就得重编译RCC啊!” 蛤,我也觉得你想的对! 关于RCC里头的文件如何调用:
你想用哪个文件的时候, 就按照你文件在QRC里头的路径去调用就好.给自己举个栗子, 假设我们的QRC里有个文件,并且已经被编译进了RCC:
这个文件它在我们的代码目录里的resources文件夹里的Image文件夹下, 再形象一点就是: X:/代码/我挖的第21648号坑/resoureces/image/Lexington.png 这样的(无力吐槽,因为粗心的我经常在这种地方摔跟头,所以写的弱智一点).
接着我们需要在代码中注册这个RCC,使用QResource类:
注册之后我们有两种方式调用其内容:
当然如果你的QRC前缀是自定义的那么请务必查看: http://doc.qt.io/archives/qt-4.8/resources.html
吼了,这样我们便能更优雅的写程序了.
等等
安卓里咋整啊?
关于安卓, 道理是一样的, 只需把编译好的RCC文件丢到安卓编译目录即可. 详情请插我的如何在安卓上使用数据库那篇水文.这里简单说一下.
利用qmake, 把RCC文件挪到安卓编译目录下的assets文件下, 这里头的文件都会被打包到APK中.在qmak里写:
注册的路径也有所不同,在安卓assets目录下的文件都要通过前缀assets:/
来访问:
完事儿, 谢谢观看, 如有错误, 恳请在博客的lssues上指正.