2011-11-20 81 views
1

我有一个QML Flickable,带有3个QML图像元素,可循环8个图像文件。我的问题是,这很少使用Symbian设备上的大量内存。所以当有人最小化应用程序时,其他应用程序没有足够的内存空间。我想知道我可以使用什么函数在焦点丢失事件释放缓存。否则,当手机内存不足时,Symbian会关闭我的应用程序。清除QML图像缓存

回答

2

我刚碰到类似的情况(字面意思)。显然,QML缓存在Qt源代码中深入硬编码。我在http://lists.qt.nokia.com/pipermail/qt-qml/2011-June/002743.html找到相关的帖子。

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

我的当前的想法是,四个常数在SRC /声明/ 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. 未知的性能影响到整个应用程序 - 不是我的问题,但要考虑的事情。

该解决方案使用Qt 4.7版本。祝你好运!

+0

谢谢,但我希望有一些更简单和不太长久的事情。 – Gerharddc

0

试过只是将图像元素缓存属性设置为false?或者,也许将图像元素缓存属性绑定到应用程序的某些焦点/活动属性?

+0

是的,但根据我的记忆监视器,它不会做任何事情来帮助。也许我只是用错了? – Gerharddc