1、Qt资源文件
在Qt中,资源文件(.qrc)是一种方便的方式来管理应用程序中的多媒体文件,如图像、图标和其他资源。这些文件使用XML格式定义,并在编译时嵌入到应用程序的二进制文件中。
创建资源文件的步骤如下:
1)在Qt Creator中,右键点击项目名,选择“添加新文件/文件夹”。
2)在弹出的对话框中,选择“Qt”类别下的“Qt资源文件”,然后点击“选择...”。
3)在资源编辑器中,可以添加资源,每次可以添加一个前缀和多个文件。
4)保存资源文件。
下面是一个简单的.qrc资源文件(myresource.qrc)示例:
<RCC><qresource prefix="/"><file>icon.png</file><file>main_background.jpg</file></qresource><qresource prefix="/icons"><file>app_icon.ico</file></qresource><qresource prefix="/images"><file>cut.png</file></qresource>
</RCC>
在这个例子中,我们定义了两个资源组:一个是根目录下的资源(图像文件),另一个是“/icons”下的图标(在 .qrc 文件中用 qresource 标签的 prefix 属性,它为 .qrc 文件中所有文件指定一个前缀)。在代码中,你可以使用:前缀来访问这些资源,例如:
QIcon icon(":/icons/app_icon.ico");
QPixmap background(":/main_background.jpg");
有些资源,像翻译文件和图标,需要随着用户的本地配置而变化。这可以在 qresource 标签的 lang 属性中指定一个合适的本地化字串来实现。例如:
<qresource>
<file>cut.jpg</file>
</qresource>
<qresource lang="fr">
<file alias="cut.jpg">cut_fr.jpg</file>
</qresource>
如果用户的本地化设置是 French (也就是说,QLocale::system().name()
returns "fr_FR"),:/cut.jpg 就会引用 cut_fr.jpg 图像。对于其他本地化设置,仍然用 cut.jpg 。
2、生成二进制资源rcc文件原因。
1)很多时候,当程序中使用的图片太多,慢慢可能会遇到一些错误,比如:
fatal error c1076:compiler limit ....
2)有时候我们写的QT代码不想让别人看到资源文件。
3、编译qrc文件,生成二进制资源。
rcc 传递 -binary 开关来生成资源数据(一般是.rcc扩展名)
例如,一个 .qrc 文件指定的资源数据集可以用下面方法编译:
rcc -binary myresource.qrc -o myresource.rcc
4、应用程序中使用rcc
1、应用程序中,用下面的代码注册资源:
QResource::registerResource("/path/to/myresource.rcc");
2、用资源路径代替原始文件系统路径。尤其是在 QIcon, QImage,QPixmap 构造器中可以传递资源路径来代替文件名称:
QAction cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cut"), this);
在内存中,资源被用资源对象树来描述。该树在启动时自动构建并用QFile来解析资源路径。可以用":/" 初始化的 QDir 来从资源树的根部开始浏览。
Qt资源支持搜索路径列表概念。若用 ":"代替":/"做前缀来引用一个资源,资源将被用搜索路径列表查询。启动时搜索路径列表是空的,调用 QDir::addResourceSearchPath()
可以添加路径。
3、如果在静态库中使用了资源,必须用.qrc 文件的base name作参数调用 Q_INIT_RESOURCE()
来强制初始化资源。例如:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Q_INIT_RESOURCE(graphlib);
...
return app.exec();
}
同样地,若你需要显式卸载一个资源集(因插件被卸载或资源失效),需要用与前面相同的base name为参数调用Q_CLEANUP_RESOURCE() 来强制移除资源。