Это старая версия документа!
Содержатся такие свойства как index(), ItemDataRole(), flags(), match()
DataRole- содержит много разных вариантов ролей данных
ListModel- простой, одномерный список
StandartItemModel- гораздо более сложная структура, каждая запись является отдельным итемом, с возможностью его настройки со-но.
Для использования, абстрактные классы необходимо наследовать, для работы необходимо определить как минимум три функции: rowCount(), ColumnCount() и data().
Для хранения данных, внутри собственного класса, похоже нужно создавать собственные структуры данных, контейнеры и т.д. и сосбна обрабатывать их.
Используется в качестве индекса в моделях, используется представлениями, делегатами, моделям выбора и поиска элементов.
Новые объекты создаются с помощью функции QAbstractItemModel::createIndex(), недействительный может быть построен с помощью конструктора QModelIndex(), недействительные часто используются в качестве родительских индексов, верхнего уровня.
Индексы относятся к элементам и содержат всю информацию, необходимую для определения их местоположения.
QAbstractItemModel::index()- возвращает индекс на существующий элемент.
bool isValid() | true если индекс принадлежит модели и имеет неотрицательные номера столбцов/строк |
QModelIndex sibling() | возвращает «родственника» в указанной позиции оО |
QVariant data() | возвращает данные для указанной роли |
Отображение на форме не указано, самое обычное
class myTableModel: public QAbstractTableModel { Q_OBJECT QList<QList<QString> *> myDataInCell; int myColunmCount; public: myTableModel(QObject *parent= nullptr); QVariant data(const QModelIndex &index, int role= Qt::DisplayRole) const; int rowCount(const QModelIndex &parent= QModelIndex()) const; int columnCount(const QModelIndex &parent= QModelIndex()) const; };
myTableModel::myTableModel(QObject *parent): QAbstractTableModel(parent) { myColunmCount= 2; // каждый вложенный лист, это строка QList<QString> *vTemp= new QList<QString>; vTemp->append("One Str/ One Column"); vTemp->append("One Str/ Sec Column"); myDataInCell.append(vTemp); QList<QString> *vTemp2= new QList<QString>; vTemp2->append("Sec Str/ One Column"); vTemp2->append("Sec Str/ Sec Column"); myDataInCell.append(vTemp2); } QVariant myTableModel::data(const QModelIndex &index, int role) const { if(role== Qt::DisplayRole) // || (==Qt::EditRole)|| (==Qt::BackgroundRole) { return myDataInCell[index.row()]->at(index.column()); } return QVariant(); } int myTableModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); // Просто чтобы не было варнинга об неиспользуемой переменной return myColunmCount; } int myTableModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); return myDataInCell.count(); }