Класс QAbstractListModel
Класс QAbstractListModel предоставляет абстрактную модель, которую можно наследовать для создания одномерных моделей списков. Подробнее...
| Заголовок: | #include <QAbstractListModel> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Наследует: | QAbstractItemModel |
| Наследуется от: | QStringListModel, QVirtualKeyboardSelectionListModel и QWebEngineHistoryModel |
Открытые функции
| QAbstractListModel(QObject *parent = nullptr) | |
| virtual | ~QAbstractListModel() |
Переопределённые открытые функции
| virtual bool | dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override |
| virtual Qt::ItemFlags | flags(const QModelIndex &index) const override |
| virtual QModelIndex | index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const override |
| virtual QModelIndex | sibling(int row, int column, const QModelIndex &idx) const override |
Подробное описание
QAbstractListModel предоставляет стандартный интерфейс для моделей, которые представляют свои данные как простую неиерархическую последовательность элементов. Он не используется напрямую, но должен наследоваться.
Поскольку модель предоставляет более специализированный интерфейс, чем QAbstractItemModel, она не подходит для использования с древовидными представлениями; вам необходимо наследоваться от QAbstractItemModel, если вы хотите предоставить модель для этой цели. Если вам нужно использовать несколько моделей списков для управления данными, может быть целесообразнее наследоваться от QAbstractTableModel вместо этого.
Простые модели могут быть созданы путём наследования от этого класса и реализации минимального набора необходимых функций. Например, мы могли бы реализовать простую только для чтения модель, основанную на QStringList, которая предоставляет список строк для виджета QListView. В таком случае нам нужно только реализовать функцию rowCount() для возврата количества элементов в списке и функцию data() для извлечения элементов из списка.
Поскольку модель представляет одномерную структуру, функция rowCount() возвращает общее количество элементов в модели. Функция columnCount() реализована для совместимости со всеми видами представлений, но по умолчанию информирует представления о том, что модель содержит только один столбец.
Наследование
При наследовании от QAbstractListModel необходимо предоставить реализации функций rowCount() и data(). Хорошо работающие модели также предоставляют реализацию headerData().
Если ваша модель используется в QML и требует ролей, помимо стандартных, предоставляемых функцией roleNames(), вы должны переопределить её.
Для редактируемых моделей списков также необходимо предоставить реализацию setData() и реализовать функцию flags(), чтобы она возвращала значение, содержащее Qt::ItemIsEditable.
Обратите внимание, что QAbstractListModel предоставляет реализацию по умолчанию для columnCount(), которая информирует представления о том, что в этой модели только один столбец элементов.
Модели, которые предоставляют интерфейсы для изменения размера данных, похожих на списки, могут предоставлять реализации insertRows() и removeRows(). При реализации этих функций важно вызывать соответствующие функции, чтобы все подключенные представления были осведомлены о любых изменениях:
- Реализация insertRows() должна вызывать beginInsertRows() до вставки новых строк в структуру данных и она должна вызывать endInsertRows() немедленно после этого.
- Реализация removeRows() должна вызывать beginRemoveRows() до удаления строк из структуры данных и она должна вызывать endRemoveRows() немедленно после этого.
Примечание: Некоторые общие рекомендации по наследованию моделей доступны в Справочнике по наследованию моделей.
См. также Классы моделей, Справочник по наследованию моделей, QAbstractItemView, QAbstractTableModel и Пример пазла представлений элементов.
Документация по функциям-членам
QAbstractListModel::QAbstractListModel(QObject *parent = nullptr)
Конструирует абстрактную модель списка с заданным parent.
~QAbstractListModel::~QAbstractListModel()
Уничтожает абстрактную модель списка.
bool QAbstractListModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
Переопределяет: QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent).
Qt::ItemFlags QAbstractListModel::flags(const QModelIndex &index) const
Переопределяет: QAbstractItemModel::flags(const QModelIndex &index) const.
QModelIndex QAbstractListModel::index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const
Переопределяет: QAbstractItemModel::index(int row, int column, const QModelIndex &parent) const.
Возвращает индекс данных в row и column с parent.
См. также parent().
QModelIndex QAbstractListModel::sibling(int row, int column, const QModelIndex &idx) const
Переопределяет: QAbstractItemModel::sibling(int row, int column, const QModelIndex &index) const.