Название: Возврат иконки из модели Отправлено: Swa от Февраль 28, 2013, 09:22 Всем привет.
Есть набор данных, которые отображаются в модели, каждый элемент имеет свою иконку. Все иконки хранятся в ресурсах приложения, а объект хранит текстовый идентификатор иконки(имя). Вопрос в том, как лучше возвращать эту иконку: так Код: QHash<QString, QPixmap> icons; Код: QVariant Model::data(int role) const { Название: Re: Возврат иконки из модели Отправлено: Old от Февраль 28, 2013, 09:31 Вопрос в том, как лучше возвращать эту иконку: При каждой отрисовке строки загружать заново картинку?или так Код: QVariant Model::data(int role) const { Название: Re: Возврат иконки из модели Отправлено: Bepec от Февраль 28, 2013, 09:49 Всё хуже :D не загружать новую, а выделять под неё место :D
Истинно адский код :D PS первый вариант нравится больше :D Название: Re: Возврат иконки из модели Отправлено: Old от Февраль 28, 2013, 10:14 Всё хуже :D не загружать новую, а выделять под неё место :D От утечки легко можно уйти. А вот загружать ее заново, даже из ресурсов, при каждой отрисовке строки очень накладно.Название: Re: Возврат иконки из модели Отправлено: Swa от Февраль 28, 2013, 10:41 А вот загружать ее заново, даже из ресурсов, при каждой отрисовке строки очень накладно. Вы правы, только что проверил, метод вызывается при каждой отрисовке. Я думал, там как-то более экономно сделано.Название: Re: Возврат иконки из модели Отправлено: Bepec от Февраль 28, 2013, 10:48 Сделал то ты ;)
Название: Re: Возврат иконки из модели Отправлено: Swa от Февраль 28, 2013, 11:04 Что сделал я?
Название: Re: Возврат иконки из модели Отправлено: GreatSnake от Февраль 28, 2013, 11:51 Я думал, там как-то более экономно сделано. Где "там"? Ведь это твой код ???Название: Re: Возврат иконки из модели Отправлено: Igors от Февраль 28, 2013, 11:53 Используйте QPixmapCache
Название: Re: Возврат иконки из модели Отправлено: GreatSnake от Февраль 28, 2013, 11:56 Используйте QPixmapCache Дык у него уже есть свой: Код: QHash<QString, QPixmap> icons; Название: Re: Возврат иконки из модели Отправлено: Igors от Февраль 28, 2013, 12:10 Ну тоже можно, только ж надо его корректно пополнять
Название: Re: Возврат иконки из модели Отправлено: Swa от Февраль 28, 2013, 12:22 Я имею в виду, что view вызывает QAbstractItemModel::data (QModelIndex &, int role) каждый раз при перерисовке, а могла бы кешировать эти данные и запрашивать только когда они изменились. Но это я просто мечтаю.
Название: Re: Возврат иконки из модели Отправлено: GreatSnake от Февраль 28, 2013, 12:24 Я имею в виду, что view вызывает QAbstractItemModel::data (QModelIndex &, int role) каждый раз при перерисовке, а могла бы кешировать эти данные и запрашивать только когда они изменились. Но это я просто мечтаю. Интересно на основании чего в твоём случае модель решит, что данные изменились ???Ведь модель понятия не имеет про данные, ибо ты их в модель не помещаешь в данном случае вовсе. Название: Re: Возврат иконки из модели Отправлено: Swa от Февраль 28, 2013, 12:44 Я имел в виду, что view мог бы кешировать эти данные, а обновлять при получении сигнала QAbstractItemModel::dataChanged.
Название: Re: Возврат иконки из модели Отправлено: GreatSnake от Февраль 28, 2013, 12:46 Я имел в виду, что view мог бы кешировать эти данные, а обновлять при получении сигнала QAbstractItemModel::dataChanged. Мде... как всё запущено. Ещё раз и внимательно читай мой пост выше.Название: Re: Возврат иконки из модели Отправлено: Swa от Февраль 28, 2013, 13:04 И что же запущено? Если я сказал что-то глупое, то объясните хотя-бы в двух словах.
Ещё раз и внимательно читай мой пост выше. Есть кастомный класс, унаследованный от QAbstractItemModel и когда реальные данные изменяются, этот сигнал высылается явно (emit dataChanged (...)). Название: Re: Возврат иконки из модели Отправлено: Bepec от Февраль 28, 2013, 13:17 Ты данные модели суёшь извне. Из своего кеша картинок. Каким манером он узнает что они изменились? :)
Название: Re: Возврат иконки из модели Отправлено: Swa от Февраль 28, 2013, 13:28 Данные - набор объектов класса, унаследованного от QObject. Юзер меняет иконку, объект высылает сигнал iconChanged, модель на него подписана.
Название: Re: Возврат иконки из модели Отправлено: GreatSnake от Февраль 28, 2013, 13:39 Цитата: assistant void QAbstractItemModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) [signal] Ты через QAbstractItemModel::setData( index, icon, Qt::DecorationRole ) в ячейку модели поместил иконку?This signal is emitted whenever the data in an existing item changes. Нет! Дык с чего модель будет испускать сей сигнал ??? Название: Re: Возврат иконки из модели Отправлено: Swa от Февраль 28, 2013, 13:43 Данные в модель не помещаются вообще.
Код: QObject::connect(item, SIGNAL(iconChanged(Item*)), this, SLOT(ItemDataChanged(Item*))); Название: Re: Возврат иконки из модели Отправлено: GreatSnake от Февраль 28, 2013, 13:52 Всё понятно. Только вот вью данные отображает, а не хранит.
В итоге данные никто не хранит, но тем не менее автор хочет, чтобы кто-то их кешировал. Отсюда вывод - сам построил такую систему - сам и делай кеширование) Название: Re: Возврат иконки из модели Отправлено: Swa от Февраль 28, 2013, 14:02 Это я понимаю теперь. ;)
|