2011-11-20 116 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