Название: Последовательное отображение картинок для QlistWidget Отправлено: vvvxmag от Январь 29, 2011, 18:04 Задача:
Требуется отображать в QlistWidget множество картинок до нескольких сотен. Если грузить их сразу, то сжирается немерено памяти и соответственно тормоза. Вопрос: как узнать какие именно итемы сейчас в области отображения? Тогда можно было бы только для них грузить картинки и все было бы значительно легче. Название: Re: Последовательное отображение картинок для QlistWidget Отправлено: kdm от Январь 29, 2011, 19:35 В билдере были такие средства. А что сейчас приходит на ум, то это когда айтем показывается, у него вызывается метод рисования. Может быть перехватывать этот event и тогда делать что надо? К примеру можно это делать installEventFilter и сделать собственный класс, который будет обрабатывать перехватываемые события. Как вариант. :-\
Название: Re: Последовательное отображение картинок для QlistWidget Отправлено: Kolobok от Январь 29, 2011, 20:15 Используй QListView
Название: Re: Последовательное отображение картинок для QlistWidget Отправлено: IGHOR от Январь 29, 2011, 21:46 я так делал, задавал setRowCount() сразу на все количество строк и отдельный тред посылал сигналы с указателями на данные которые постепенно заполнялись, и можно убить тред если надо перегрузить таблицу не дожидаясь догрузки
работало моментально, пользователь не успевает прокрутку докрутить до не загруженной области Название: Re: Последовательное отображение картинок для QlistWidget Отправлено: shirushizo от Январь 30, 2011, 12:28 ... Вопрос: как узнать какие именно итемы сейчас в области отображения? ... Методы: Код: QModelIndex QAbstractItemView::indexAt ( const QPoint & point ) const [pure virtual] Собстно: Код: int min_row = listWidget->indexAt(QPoint(0,0)).row(); Название: Re: Последовательное отображение картинок для QlistWidget Отправлено: Igors от Январь 30, 2011, 12:50 Вычисление "а кто там видимый" утомительно. Я бы унаследовался от QIcon и грузил бы картинку из кэша для paint и др. перекрытых методов. Кэш сам вытеснит неиспользуемые картинки, нужно только подобрать размер.
Название: Re: Последовательное отображение картинок для QlistWidget Отправлено: vvvxmag от Январь 30, 2011, 13:57 Не очень понял про QIcon? про какой кэш идет речь?
Попробую воспользоваться QListView. Название: Re: Последовательное отображение картинок для QlistWidget Отправлено: Igors от Январь 30, 2011, 14:37 Не очень понял про QIcon? про какой кэш идет речь? То же самое. Попробую воспользоваться QListView. Код
Название: Re: Последовательное отображение картинок для QlistWidget Отправлено: vvvxmag от Январь 30, 2011, 17:54 Когда мы будем запихивать в кэш QIcon он будет сжирать очень много памяти.
Насколько я понимаю, когда загружается картинка jpg она в памяти раскрывается и начинает занимать места больше чем на диске (не знаю как точнее выразить мысль), в итоге получим что 20 метров картинок на диске превращаются в 500 метров в памяти. Или такое происходит только если использовать QPixmap? А QIcon не жрет столько памяти? Я хочу что бы в памяти были загружены только те картинки, которые отображаются. Название: Re: Последовательное отображение картинок для QlistWidget Отправлено: Igors от Январь 30, 2011, 18:24 Когда мы будем запихивать в кэш QIcon он будет сжирать очень много памяти. Да, размер загруженной картинки может быть намного больше чем на диске, здесь ничего не попишешь. Но Вы можете управлять числом загруженных картинок, и с помощью кэша (QCache) это легко. Больше емкость кэша - больше расход памяти, зато быстрее - и наоборот. Это гораздо проще чем мучительный подсчет видимости. Насколько я понимаю, когда загружается картинка jpg она в памяти раскрывается и начинает занимать места больше чем на диске (не знаю как точнее выразить мысль), в итоге получим что 20 метров картинок на диске превращаются в 500 метров в памяти. Или такое происходит только если использовать QPixmap? А QIcon не жрет столько памяти? Я хочу что бы в памяти были загружены только те картинки, которые отображаются. QIcon - просто для примера, используйте что Вам надо (может QImage, QPixmap). Когда Вы помещаете новую картинку в кэш, наименее используемые удаляются кэшем автоматычно (т.е. что и требуется). Название: Re: Последовательное отображение картинок для QlistWidget Отправлено: Kolobok от Январь 30, 2011, 18:29 Для этого есть QPixmapCache.
Название: Re: Последовательное отображение картинок для QlistWidget Отправлено: Igors от Январь 30, 2011, 18:46 Для этого есть QPixmapCache. Во блин "система" - не успеешь подумать, а это за тебя уже сделали!Хотя впрочем кто знает, хорошо это или плохо... Название: Re: Последовательное отображение картинок для QlistWidget Отправлено: vvvxmag от Январь 30, 2011, 19:45 Огромное всем спасибо!!!!!
Особенно за проявленное терпение и разъяснения. |