IlyaVishnikin
@IlyaVishnikin

Как реализовать внутренние модели?

Имеется QML модель ListModel для представления ListView, которая содержит элементы следующего вида:

ListElement {
        name: "Name"
        surname: "Username"
        phones: [
            ListElement { phone: "8-800-555-35-35" },
            ListElement { phone: "8-800-555-36-36" },
            ListElement { phone: "8-800-555-37-37" }
        ]
        groups: [
            ListElement { group: "Family"    },
            ListElement { group: "Personal" }
        ]
        avatar: "qrc:/assets/default-user-icon.svg"
}


И имеются компоненты ContactPersonalInfo, ContactPhones, ContactGroups и ContactAvatar, которые отображают соответствующие атрибуты.

Вопрос в следующем: как представить данную модель в виде класса ContactsModel(наследуется от QAbstractListModel)?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
Как-то так
class ContactsModel: public QAbstractListModel
{
    Q_OBJECT

public:
    explicit ContactsModel(const QVector<Contact>& items, QObject* parent = nullptr)
               : QAbstractListModel(parent)
                _items(items)
   {
   }

    int rowCount(const QModelIndex& parent = QModelIndex()) const override
    {
           return _items.size();
    }
    QVariant data(const QModelIndex& index, int role) const override
    {
    if(!index.isValid() ||
        index.row() < 0  ||
        index.row() >= _items.size())
    {
         return QVariant();
    }

    switch(role)
    {
        case Qt::DisplayRole:
           ...
    }

    return QVariant();
    }

private:
    QVector<Contact> _items;
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы