0

我们有一个具有多个主题的应用程序,称为其他次要应用程序。所以,在主应用程序上有这样的东西:

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

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

4

1 回答 1

1

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

因此,在您的情况下,可能还有其他一些形式的更多引用。

关于以下方面的重要文件unregisterResource

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

所以我强烈的猜测是有些QResource人仍然指向你试图取消注册的那个。

于 2017-05-03T19:13:13.780 回答