QResource:注销 .rcc 文件
QResource: unregister .rcc files
我们有一个多主题的应用程序,它调用了其他小应用程序。所以,在主应用程序上有类似的东西:
// 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
returns 如果资源已成功卸载,则为真 并且 不存在对资源的引用。
所以在你的情况下,可能还有一些来自其他表格的更多参考。
关于 unregisterResource
的重要文档:
如果当前有QResources引用与未注册文件相关的资源,它们将继续有效但资源文件本身将从资源根目录中删除,从而无法创建更多指向此资源数据的 QResource。当指向它的最后一个 QResource 被销毁时,资源本身将从内存中取消映射。
所以我强烈猜测一些 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
returns 如果资源已成功卸载,则为真 并且 不存在对资源的引用。
所以在你的情况下,可能还有一些来自其他表格的更多参考。
关于 unregisterResource
的重要文档:
如果当前有QResources引用与未注册文件相关的资源,它们将继续有效但资源文件本身将从资源根目录中删除,从而无法创建更多指向此资源数据的 QResource。当指向它的最后一个 QResource 被销毁时,资源本身将从内存中取消映射。
所以我强烈猜测一些 QResource
仍然指向您试图注销的那个。