Очистить кэш изображений QML - PullRequest
1 голос
/ 20 ноября 2011

У меня есть QML Flickable с 3 элементами изображения QML, которые циклически перебирают 8 файлов изображений.Моя проблема заключается в том, что при использовании Symbian на нем много памяти и очень мало.Поэтому, когда кто-то сворачивает приложение, для других приложений не остается много памяти.Я хочу знать, какую функцию я могу использовать для события потери фокуса, чтобы освободить кэш.В противном случае Symbian закрывает мое приложение, когда в телефоне заканчивается память.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

Я просто столкнулся с очень похожей ситуацией (буквально).По-видимому, кеш 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 и ваше приложение, и изображения не будут кэшироваться (или, по крайней мере, поведение IЯ вижу, что это означает, что изображения больше не кэшируются).У этого решения есть несколько недостатков:

  1. Требуется модификация дерева исходных текстов Qt
  2. Неизвестный удар по производительности для всего приложения - не проблема для меня, но кое-что нужно учитывать.

Это решение работало с Qt версии 4.7.Удачи!

0 голосов
/ 23 ноября 2011

Вы пытались установить для свойства кэша элемента изображения значение false? Или, может быть, связать свойство кэша элемента изображения с некоторым свойством focus / active вашего приложения?

...