Инструменты пользователя

Инструменты сайта


develop:qt:model-view

Это старая версия документа!


Модель-представление

Модель (данных)

Содержатся такие свойства как index(), ItemDataRole(), flags(), match()
DataRole- содержит много разных вариантов ролей данных

ListModel- простой, одномерный список
StandartItemModel- гораздо более сложная структура, каждая запись является отдельным итемом, с возможностью его настройки со-но.

Для использования, абстрактные классы необходимо наследовать, для работы необходимо определить как минимум три функции: rowCount(), ColumnCount() и data().
Для хранения данных, внутри собственного класса, похоже нужно создавать собственные структуры данных, контейнеры и т.д. и сосбна обрабатывать их.

QModelIndex

Используется в качестве индекса в моделях, используется представлениями, делегатами, моделям выбора и поиска элементов.
Новые объекты создаются с помощью функции 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();
}
develop/qt/model-view.1635745961.txt.gz · Последнее изменение: 2021/11/01 05:52 — admin