在运行时在多个.qrc文件之间切换

时间:2016-03-07 17:11:06

标签: qt qml

我有几个主题文件夹,每个文件夹包含一个.qrc文件:

redTheme/
           - File.qml
           - qml.qrc
blueTheme/
           - File.qml
           - qml.qrc

我目前能够在编译时在这些主题之间切换。这意味着我需要将import语句更改为我想要使用的主题。

我想知道我是否可以在运行时执行此操作。它将为用户提供更多的灵活性。示例:用户点击Button会触发signal并加载其他主题(来自C++QML

我的第一个讯问是:我应该使用.qrc个文件还是QML Modules

前者在从C++调用后加载其内容,而后者则强迫我使用import语句。

这让我想到了其他问题:

  1. 我可以使用多个.qrc个文件吗?
  2. 如果是这样,我可以"卸载"一个.qrc文件?可能是一个愚蠢的问题 我并不完全了解Qt资源系统机制。
  3. 我如何加载另一个.qrc文件?我会得到我的main.qrc文件 加载视图和加载自定义themes.qrc的{​​{1}}个文件 对象。

1 个答案:

答案 0 :(得分:4)

是的,您可以,但只能使用外部资源二进制文件:

qrc - 文件可以编译为可执行文件,也可以编译为.rcc文件。这些rcc文件可以动态加载。见External Binary Resources。可以使用QResource::registerResourceQResource::unregisterResource加载这些二进制资源。

示例:

//Build the resources using:
rcc -binary redTheme/qml.qrc -o <build_dir>/themes/redTheme.rcc
rcc -binary blueTheme/qml.qrc -o <build_dir>/themes/blueTheme.rcc

//And in your code:
QResource::registerResource("./themes/redTheme.rcc");

//switching the resource:
QResource::unregisterResource("./themes/redTheme.rcc");
QResource::registerResource("./themes/blueTheme.rcc");

使用此机制,您可以将每个主题打包在rcc文件中,并根据用户的选择加载它。

注意:您实际上可以拥有&#34;默认主题&#34;直接编译到应用程序中。加载rcc - 文件后,它将覆盖所有具有相同名称的文件。只要所有资源看起来都相同(相同的文件结构),这将正常工作。只要卸载rcc,Qt就会切换回应用程序资源。