Qt在编译资源时生成.cpp文件,例如:图像,在.qrc文件中定义。编译输出如下:
/usr/local/Qt-5.5.1/bin/rcc -name images ../myApplication/images.qrc -o qrc_images.cpp
g++ -c -pipe -g -std=c++0x -Wall -W -D_REENTRANT -fPIC -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_QUICK_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_SQL_LIB -DQT_CORE_LIB -I../myApplication -I. -I../shared_base/Debug -I../shared_base -I/usr/local/Qt-5.5.1/include -I/usr/local/Qt-5.5.1/include/QtQuick -I/usr/local/Qt-5.5.1/include/QtMultimedia -I/usr/local/Qt-5.5.1/include/QtGui -I/usr/local/Qt-5.5.1/include/QtQml -I/usr/local/Qt-5.5.1/include/QtNetwork -I/usr/local/Qt-5.5.1/include/QtSql -I/usr/local/Qt-5.5.1/include/QtCore -I. -I/usr/local/Qt-5.5.1/mkspecs/linux-g++ -o qrc_images.o qrc_images.cpp
正如在输出中看到的,为了编译image resources
,执行了两个不同的命令,rcc
和g++
。
但是,可以使用images
简单地编译rcc
,并在运行时在应用程序中注册此二进制文件。我无法理解这个g++
命令的作用以及为什么它是必要的。
为什么qt在这个文件中包含Multimedia
,Gui
等库,并使其比图像更大?
注意:images文件夹的大小为27MB。生成的images.cpp文件大小为66MB,如果我自己用rcc-utility编译图像,它也是27MB,就像66MB一样。
答案 0 :(得分:2)
...人们可以简单地编译"图像"用rcc并注册这个 运行时期间应用程序中的二进制文件。
正如@vahancho所指出的,如果生成-binary
选项rcc
的二进制资源数据,也可以动态加载Qt资源。该文件可以加载QResource::registerResource()
函数。
我无法理解这个g ++命令的作用以及为什么它是必要的。
它构建目标文件,然后在稍后阶段将其链接到二进制文件中。
为什么qt还包括多媒体,Gui等库 文件并使其大于图像?
包含libs并不意味着二进制文件会更大。链接器将仅使用代码中使用的那些对象生成二进制文件。
答案 1 :(得分:1)
cpp
生成的rcc
文件更大,因为图片中的每个byte
都会成为cpp中的0x00
代码。
如果你的文件是100KB,那么cpp
文件可能是500KB,没关系。
最终的可执行文件不会那么大,二进制是二进制,cpp是cpp。