Russian Qt Forum
Ноябрь 01, 2024, 06:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Возврат иконки из модели  (Прочитано 9477 раз)
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« : Февраль 28, 2013, 09:22 »

Всем привет.
Есть набор данных, которые отображаются в модели, каждый элемент имеет свою иконку. Все иконки хранятся в ресурсах приложения, а объект хранит текстовый идентификатор иконки(имя).
Вопрос в том, как лучше возвращать эту иконку:
так
Код:
QHash<QString, QPixmap> icons;
...
QVariant Model::data(int role) const {
if (role == Qt::DecorationRole)
    return icons[iconName];
}
или так
Код:
QVariant Model::data(int role) const {
if (role == Qt::DecorationRole)
    return new Pixmap(iconName, "PNG");
}
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Февраль 28, 2013, 09:31 »

Вопрос в том, как лучше возвращать эту иконку:
или так
Код:
QVariant Model::data(int role) const {
if (role == Qt::DecorationRole)
    return new Pixmap(iconName, "PNG");
}
При каждой отрисовке строки загружать заново картинку?
Записан
Bepec
Гость
« Ответ #2 : Февраль 28, 2013, 09:49 »

Всё хуже Веселый не загружать новую, а выделять под неё место Веселый

Истинно адский код Веселый

PS первый вариант нравится больше Веселый
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Февраль 28, 2013, 10:14 »

Всё хуже Веселый не загружать новую, а выделять под неё место Веселый
От утечки легко можно уйти. А вот загружать ее заново, даже из ресурсов, при каждой отрисовке строки очень накладно.
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #4 : Февраль 28, 2013, 10:41 »

А вот загружать ее заново, даже из ресурсов, при каждой отрисовке строки очень накладно.
Вы правы, только что проверил, метод вызывается при каждой отрисовке. Я думал, там как-то более экономно сделано.
Записан
Bepec
Гость
« Ответ #5 : Февраль 28, 2013, 10:48 »

Сделал то ты  Подмигивающий
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #6 : Февраль 28, 2013, 11:04 »

Что сделал я?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Февраль 28, 2013, 11:51 »

Я думал, там как-то более экономно сделано.
Где "там"? Ведь это твой код Непонимающий
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Февраль 28, 2013, 11:53 »

Используйте QPixmapCache
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Февраль 28, 2013, 11:56 »

Используйте QPixmapCache

Дык у него уже есть свой:
Код:
QHash<QString, QPixmap> icons;
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Февраль 28, 2013, 12:10 »

Дык у него уже есть свой:
Код:
QHash<QString, QPixmap> icons;
Ну тоже можно, только ж надо его корректно пополнять
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #11 : Февраль 28, 2013, 12:22 »

Я имею в виду, что view вызывает QAbstractItemModel::data (QModelIndex &, int role) каждый раз при перерисовке, а могла бы кешировать эти данные и запрашивать только когда они изменились. Но это я просто мечтаю.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Февраль 28, 2013, 12:24 »

Я имею в виду, что view вызывает QAbstractItemModel::data (QModelIndex &, int role) каждый раз при перерисовке, а могла бы кешировать эти данные и запрашивать только когда они изменились. Но это я просто мечтаю.
Интересно на основании чего в твоём случае модель решит, что данные изменились Непонимающий
Ведь модель понятия не имеет про данные, ибо ты их в модель не помещаешь в данном случае вовсе.
« Последнее редактирование: Февраль 28, 2013, 12:26 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #13 : Февраль 28, 2013, 12:44 »

Я имел в виду, что view мог бы кешировать эти данные, а обновлять при получении сигнала QAbstractItemModel::dataChanged.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #14 : Февраль 28, 2013, 12:46 »

Я имел в виду, что view мог бы кешировать эти данные, а обновлять при получении сигнала QAbstractItemModel::dataChanged.
Мде... как всё запущено. Ещё раз и внимательно читай мой пост выше.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 22.