
Создаем модель для QListView в режиме IconMode. - Работа с моделями в Qt для отображения данных в виджетах. Часть 5
В этой статье мы рассмотрим работу QListView в режиме отображения иконок.
В качестве основы будем использовать проект из предыдущей статьи.
Чтобы перевести QListView в режим отображения иконок, откроем редактор формы, выберем наш виджет QListView и в редакторе свойств компонента выберем в viewMode – IconMode:
Запустим проект
Так как мы ничего не меняли, результат будет таким:
Давайте отключим наш делегат, закомментировав строку:
//this->ui->listView->setItemDelegate(new ComboboxItemDelegate);
Удалим класс Делегата, в данном примере он нам не понадобится.
Вот что у нас получится:
Результат неудовлетворительный, да и иконок нет.
Пересоздадим нашу модель. Для этого добавим новый класс QListViewModel и скопируем заголовочный файл и реализацию из класса QComboBoxModel.
Произведем замену QComboBoxModel на QListViewModel в исходном коде класса и удалим из проекта класс QComboBoxModel.
Внесем изменения в метод data()
QVariant QListViewModel::data( const QModelIndex &index, int role ) const
{
QVariant value;
switch ( role )
{
case Qt::DisplayRole: //string
{
value = this->values->at(index.row()).getName();
}
break;
case Qt::DecorationRole: //image
{
QPixmap icon = QPixmap(":/img/" + this->values->value(index.row()).getIcon());
QPixmap tmp = icon.scaled(30, 30, Qt::KeepAspectRatio);
value = tmp;
}
break;
case Qt::UserRole: //data
{
value = this->values->at(index.row()).getId();
}
break;
default:
break;
}
return value;
}
Закомментируем пункт «Select flag», в этом режиме он нам не нужен:
// values->append(CountryFlag(-1, "Select flag", ""));
Запустим:
Вот и всё. Проверьте, как работают кнопки.
Заключение
Сегодня мы рассмотрели второй режим QListView – IconMode.
Внесли изменения в модель, для отображения иконок в этом режиме.
Скачать исходный код вы можете с GitFlic.
Добавить комментарий