我有几个主题文件夹,每个文件夹包含一个.qrc
文件:
redTheme/
- File.qml
- qml.qrc
blueTheme/
- File.qml
- qml.qrc
我目前能够在编译时在这些主题之间切换。这意味着我需要将import
语句更改为我想要使用的主题。
我想知道我是否可以在运行时执行此操作。它将为用户提供更多的灵活性。示例:用户点击Button
会触发signal
并加载其他主题(来自C++
或QML
)
我的第一个讯问是:我应该使用.qrc
个文件还是QML Modules?
前者在从C++
调用后加载其内容,而后者则强迫我使用import
语句。
这让我想到了其他问题:
.qrc
个文件吗?.qrc
文件?可能是一个愚蠢的问题
我并不完全了解Qt资源系统机制。.qrc
文件?我会得到我的main.qrc
文件
加载视图和加载自定义themes.qrc
的{{1}}个文件
对象。答案 0 :(得分:4)
是的,您可以,但只能使用外部资源二进制文件:
qrc
- 文件可以编译为可执行文件,也可以编译为.rcc
文件。这些rcc文件可以动态加载。见External Binary Resources。可以使用QResource::registerResource
和QResource::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就会切换回应用程序资源。