我们有一个具有多个主题的应用程序,这些应用程序称为其他次要应用程序。因此,在主应用程序上有类似这样的内容:
// 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
的重要文档:
如果存在当前引用与未注册文件相关的资源的QResource,它们将继续有效,但是资源文件本身将从资源根目录中删除,因此无法再创建指向该资源数据的QResource。当最后一个指向资源的QResource被销毁时,资源本身将不会从内存中映射。
因此,我的强烈猜测是,某些QResource
仍指向您尝试注销的那个。
关于c++ - QResource:注销.rcc文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43766738/