gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:13:47 27 4
gpt4 key购买 nike

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

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

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

我想知道我是否可以在运行时执行此操作。它将为用户提供更多的灵 active 。示例:用户单击触发 信号Button 并加载另一个主题(来自 C++QML)

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

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

这让我想到其他问题:

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

最佳答案

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

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 文件中,并根据用户的选择加载它。

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

关于qt - 在运行时在多个 .qrc 文件之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35849786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com