c++ - QResource:注销 .rcc 文件

标签 c++ qt qresource

我们有一个有多个主题的应用程序,它调用了其他小应用程序。所以,在主应用程序上有类似的东西:

// User opens app with theme A
QResource::registerResource("theme_a.rcc");      // returns TRUE

// User changes theme to B
QResource::unregisterResource("theme_a.rcc");    // returns TRUE
QResource::registerResource("theme_b.rcc");      // returns TRUE

主应用程序一切正常。当此软件调用其他 qt 应用程序时,问题就开始了。

在这些小应用程序中,我们遵循相同的注册和注销流程。奇怪的是,注册总是有效,而注销永远无效(仅在未成年人应用程序中)。它正在发生这样的事情:

// User opens app with theme A
QResource::registerResource("minor_theme_a.rcc");      // returns TRUE

// User changes theme to B
QResource::unregisterResource("minor_theme_a.rcc");    // returns FALSE
QResource::registerResource("minor_theme_b.rcc");      // returns TRUE

为什么会这样?有解决办法吗?

最佳答案

unregisterResource 如果资源已成功卸载并且不存在对该资源的引用,则返回 true。

因此,在您的情况下,可能还有来自其他一些表格的更多引用。

关于 unregisterResource 的重要文档:

如果当前有 QResources 引用与未注册文件相关的资源,它们将继续有效,但资源文件本身将从资源根目录中删除,因此无法创建更多 QResource指向此资源数据。当指向它的最后一个 QResource 被销毁时,资源本身将从内存中取消映射。

所以我强烈猜测一些 QResource 仍然指向您试图注销的那一个。

关于c++ - QResource:注销 .rcc 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43766738/

相关文章:

c++ - QTreeView:维护QModelIndex与底层数据的映射

c++ - 如何使用 Qt 将两个 QComboBoxes 与 C++ 互连

qt - Qt Creator 中没有资源文件

c++ - QT 5.4,无法从代码访问资源

c++ - 在创建此函数以从 C++ 中的单链表搜索元素时,我在哪里犯了错误?

c++ - 数组错误(不允许使用不完整的类型)

C++ 如何在静态库的命名空间中设置私有(private)类成员?

C++ 和双重检查锁定的风险 : Workaround?

c++ - 如何将 Visual Studio 项目导出到 Qt?

python - 如何在qtdesigner中使用qss中的qrc资源?