我们有一个具有多个主题的应用程序,它称为其他次要应用程序。所以,在主应用程序上有这样的东西:
// 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为什么会这样?有解决办法吗?
发布于 2017-05-03 19:13:13
如果资源成功卸载,则unregisterResource返回true,和不存在对资源的引用。
所以,在你的例子中,还有其他一些形式的引用。
关于unregisterResource的重要文档
如果有当前引用与未注册文件相关的资源的QResources,则它们将继续有效,但资源文件本身将从资源根中删除,因此无法创建指向该资源数据的进一步QResource。当指向它的最后一个QResource被销毁时,资源本身将被从内存中取消映射。
因此,我的猜测是,一些QResource仍然指向您试图取消注册的那个。
https://stackoverflow.com/questions/43766738
复制相似问题