清除QML图像缓存

时间:2011-11-20 09:27:19

标签: c++ image qt memory-management qml

我有一个带有3个QML图像元素的QML Flickable,可循环显示8个图像文件。我的问题是,这在Symbian设备上占用的内存非常少。因此,当有人最小化应用程序时,其他应用程序没有大量内存。我想知道我可以在焦点丢失事件上使用什么功能来释放缓存。否则Symbian会在手机内存不足时关闭我的应用程序。

2 个答案:

答案 0 :(得分:2)

我刚遇到一个非常相似的情况(字面意思)。显然,QML缓存在Qt源内深度硬编码。我在http://lists.qt.nokia.com/pipermail/qt-qml/2011-June/002743.html找到了相关的帖子。

不幸的是,从该链接派生的解决方案需要修改您的Qt构建。我不知道这是否适合你的情况。

我目前的想法是在 src / declarative / util / qdeclarativepixmapcache.cpp 文件顶部定义的四个常量(从上面的链接引用的第66-69行)控制何时以及为什么QML图像缓存已修改。我将CACHE_EXPIRE_TIME常量设置为0,因为该文件中的进一步逻辑表明当常量设置为0时,缓存中的项目立即过期,因此将被删除。随着事态的发展,我会更新这个答案。

编辑:

我建议的解决方案确实有效。在QDeclarativePixmapCache.cpp文件中,从

更改第68行
#define CACHE_EXPIRE_TIME 30

#define CACHE_EXPIRE_TIME 0

重建Qt和您的应用程序,图像不会被缓存(或者至少,我看到的行为表明图像不再被缓存)。这个解决方案有几个缺点:

  1. 需要修改Qt源代码树
  2. 对整个应用程序的未知性能影响 - 对我来说不是问题,但需要考虑。
  3. 此解决方案适用于Qt 4.7版。祝你好运!

答案 1 :(得分:0)

是否尝试过将image元素缓存属性设置为false?或者可能将图像元素缓存属性绑定到应用程序的某些焦点/活动属性?