我们有一个具有多个主题的应用程序,这些应用程序称为其他次要应用程序。因此,在主应用程序上有类似这样的内容:

// 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/

10-12 05:06