Четверг, 17.12.2020 08:00

Создаем модель для QListView в режиме IconMode. - Работа с моделями в Qt для отображения данных в виджетах. Часть 5

Создаем модель для QListView в режиме IconMode. - Работа с моделями в Qt для отображения данных в виджетах. Часть 5

В этой статье мы рассмотрим работу QListView в режиме отображения иконок.

В качестве основы будем использовать проект из предыдущей статьи.

Чтобы перевести QListView в режим отображения иконок, откроем редактор формы, выберем наш виджет QListView и в редакторе свойств компонента выберем в viewMode – IconMode:

Запустим проект

Так как мы ничего не меняли, результат будет таким:

2020-12-16_12-46-46.png

Давайте отключим наш делегат, закомментировав строку:

//this->ui->listView->setItemDelegate(new ComboboxItemDelegate);

Удалим класс Делегата, в данном примере он нам не понадобится.

Вот что у нас получится:

2020-12-16_12-48-34.png

Результат неудовлетворительный, да и иконок нет.

Пересоздадим нашу модель. Для этого добавим новый класс 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", ""));

Запустим:

2020-12-16_14-35-50.png

Вот и всё. Проверьте, как работают кнопки.

Заключение

Сегодня мы рассмотрели второй режим QListView – IconMode.

Внесли изменения в модель, для отображения иконок в этом режиме.

Скачать исходный код вы можете с GitFlic.

Категория Модели
Теги Qt

Добавить комментарий

Простой текст

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.
Просмотров: 111