Класс QAbstractItemModel
Класс QAbstractItemModel предоставляет абстрактный интерфейс для классов моделей элементов. Подробнее...
| Заголовок: | #include <QAbstractItemModel> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Наследует: | QObject |
| Наследуется от: | QAbstractListModel, QAbstractProxyModel, QAbstractTableModel, QConcatenateTablesProxyModel, QFileSystemModel, QHelpContentModel и QStandardItemModel |
Открытые типы
| Перечисление | CheckIndexOption { НетОпции, ИндексДействителен, НеИспользоватьРодителя, РодительНедействителен } |
| Флаги | CheckIndexOptions |
| Перечисление | LayoutChangeHint { НетИзмененияМакет, ИзменениеСортировкиПоВертикали, ИзменениеСортировкиПоГоризонтали } |
Открытые функции
| QAbstractItemModel(QObject *parent = nullptr) | |
| virtual | ~QAbstractItemModel() |
| virtual QModelIndex | buddy(const QModelIndex &index) const |
| virtual bool | canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const |
| virtual bool | canFetchMore(const QModelIndex &parent) const |
| bool | checkIndex(const QModelIndex &index, QAbstractItemModel::CheckIndexOptions options = CheckIndexOption::NoOption) const |
| virtual bool | clearItemData(const QModelIndex &index) |
| virtual int | columnCount(const QModelIndex &parent = QModelIndex()) const = 0 |
| virtual QVariant | data(const QModelIndex &index, int role = Qt::DisplayRole) const = 0 |
| virtual bool | dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) |
| virtual void | fetchMore(const QModelIndex &parent) |
| virtual Qt::ItemFlags | flags(const QModelIndex &index) const |
| virtual bool | hasChildren(const QModelIndex &parent = QModelIndex()) const |
| bool | hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const |
| virtual QVariant | headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const |
| virtual QModelIndex | index(int row, int column, const QModelIndex &parent = QModelIndex()) const = 0 |
| bool | insertColumn(int column, const QModelIndex &parent = QModelIndex()) |
| virtual bool | insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) |
| bool | insertRow(int row, const QModelIndex &parent = QModelIndex()) |
| virtual bool | insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) |
| virtual QMap<int, QVariant> | itemData(const QModelIndex &index) const |
| virtual QModelIndexList | match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const |
| virtual QMimeData * | mimeData(const QModelIndexList &indexes) const |
| virtual QStringList | mimeTypes() const |
| bool | moveColumn(const QModelIndex &sourceParent, int sourceColumn, const QModelIndex &destinationParent, int destinationChild) |
| virtual bool | moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild) |
| bool | moveRow(const QModelIndex &sourceParent, int sourceRow, const QModelIndex &destinationParent, int destinationChild) |
| virtual bool | moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild) |
| virtual void | multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const |
| virtual QModelIndex | parent(const QModelIndex &index) const = 0 |
| bool | removeColumn(int column, const QModelIndex &parent = QModelIndex()) |
| virtual bool | removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) |
| bool | removeRow(int row, const QModelIndex &parent = QModelIndex()) |
| virtual bool | removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) |
| virtual QHash<int, QByteArray> | roleNames() const |
| virtual int | rowCount(const QModelIndex &parent = QModelIndex()) const = 0 |
| virtual bool | setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) |
| virtual bool | setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) |
| virtual bool | setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) |
| virtual QModelIndex | sibling(int row, int column, const QModelIndex &index) const |
| virtual void | sort(int column, Qt::SortOrder order = Qt::AscendingOrder) |
| virtual QSize | span(const QModelIndex &index) const |
| virtual Qt::DropActions | supportedDragActions() const |
| virtual Qt::DropActions | supportedDropActions() const |
Public Slots
| virtual void | revert() |
| virtual bool | submit() |
Signals
| void | columnsAboutToBeInserted(const QModelIndex &parent, int first, int last) |
| void | columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn) |
| void | columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last) |
| void | columnsInserted(const QModelIndex &parent, int first, int last) |
| void | columnsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int column) |
| void | columnsRemoved(const QModelIndex &parent, int first, int last) |
| void | dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles = QList<int>()) |
| void | headerDataChanged(Qt::Orientation orientation, int first, int last) |
| void | layoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint) |
| void | layoutChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint) |
| void | modelAboutToBeReset() |
| void | modelReset() |
| void | rowsAboutToBeInserted(const QModelIndex &parent, int start, int end) |
| void | rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow) |
| void | rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last) |
| void | rowsInserted(const QModelIndex &parent, int first, int last) |
| void | rowsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row) |
| void | rowsRemoved(const QModelIndex &parent, int first, int last) |
Защищенные функции
| void | beginInsertColumns(const QModelIndex &parent, int first, int last) |
| void | beginInsertRows(const QModelIndex &parent, int first, int last) |
| bool | beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild) |
| bool | beginMoveRows(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild) |
| void | beginRemoveColumns(const QModelIndex &parent, int first, int last) |
| void | beginRemoveRows(const QModelIndex &parent, int first, int last) |
| void | beginResetModel() |
| void | changePersistentIndex(const QModelIndex &from, const QModelIndex &to) |
| void | changePersistentIndexList(const QModelIndexList &from, const QModelIndexList &to) |
| QModelIndex | createIndex(int row, int column, const void *ptr = nullptr) const |
| QModelIndex | createIndex(int row, int column, quintptr id) const |
| void | endInsertColumns() |
| void | endInsertRows() |
| void | endMoveColumns() |
| void | endMoveRows() |
| void | endRemoveColumns() |
| void | endRemoveRows() |
| void | endResetModel() |
| QModelIndexList | persistentIndexList() const |
Защищенные слоты
| virtual void | resetInternalData() |
Подробное описание
Класс QAbstractItemModel определяет стандартный интерфейс, который должны использовать модели элементов, чтобы иметь возможность взаимодействовать с другими компонентами в архитектуре модель/вид. Он не предназначен для прямого создания экземпляров. Вместо этого вы должны унаследовать его, чтобы создать новые модели.
Класс QAbstractItemModel является одним из классов модели/представления и входит в состав фреймворка Qt для модели/представления. Он может использоваться в качестве базовой модели данных для элементов представления элементов в QML или классах представления элементов в модуле Qt Widgets.
Если вам нужна модель для использования с представлением элементов, таким как элемент списка QML или виджеты C++ QListView или QTableView, следует рассмотреть возможность наследования от QAbstractListModel или QAbstractTableModel вместо этого класса.
Базовая модель данных предоставляется представлениям и делегатам в виде иерархии таблиц. Если вы не используете иерархию, то модель представляет собой простую таблицу строк и столбцов. Каждый элемент имеет уникальный индекс, задаваемый QModelIndex.
Каждый элемент данных, к которому можно получить доступ через модель, имеет связанный с ним индекс модели. Вы можете получить этот индекс модели с помощью функции index(). Каждый индекс может иметь индекс sibling(); индексы дочерних элементов имеют индекс parent().
Каждый элемент имеет ряд элементов данных, связанных с ним, и их можно получить, указав роль (см. Qt::ItemDataRole) в функции data() модели. Данные для всех доступных ролей можно получить одновременно с помощью функции itemData().
Данные для каждой роли устанавливаются с помощью конкретной Qt::ItemDataRole. Данные для отдельных ролей устанавливаются индивидуально с помощью setData(), или они могут быть установлены для всех ролей с помощью setItemData().
Элементы могут быть запрошены с помощью flags() (см. Qt::ItemFlag), чтобы увидеть, можно ли их выбрать, перетащить или манипулировать другими способами.
Если у элемента есть дочерние объекты, hasChildren() возвращает true для соответствующего индекса.
Модель имеет rowCount() и columnCount() для каждого уровня иерархии. Строки и столбцы могут быть вставлены и удалены с помощью insertRows(), insertColumns(), removeRows() и removeColumns().
Модель излучает сигналы для обозначения изменений. Например, dataChanged() излучается всякий раз, когда изменяются элементы данных, предоставляемые моделью. Изменения в заголовках, предоставляемых моделью, вызывают излучение headerDataChanged(). Если структура базовых данных изменяется, модель может излучать layoutChanged() для указания подключенным представлениям, что они должны перерисовать любые отображаемые элементы, учитывая новую структуру.
Элементы, доступные через модель, могут быть проверены на наличие конкретных данных с помощью функции match().
Для сортировки модели можно использовать sort().
Наследование
Примечание: Некоторые общие рекомендации по наследованию моделей доступны в Справочнике по наследованию моделей.
При наследовании от QAbstractItemModel, по меньшей мере, необходимо реализовать index(), parent(), rowCount(), columnCount() и data(). Эти функции используются во всех моделях только для чтения и формируют основу для редактируемых моделей.
Можно также переопределить hasChildren() для обеспечения специального поведения для моделей, где реализация rowCount() является ресурсоёмкой. Это позволяет моделям ограничивать количество данных, запрашиваемых представлениями, и может использоваться в качестве способа реализации ленивой загрузки данных модели.
Для включения редактирования в вашей модели необходимо также реализовать setData() и переопределить flags(), чтобы убедиться, что ItemIsEditable возвращается. Также можно переопределить headerData() и setHeaderData() для управления способом представления заголовков вашей модели.
Сигналы dataChanged() и headerDataChanged() должны быть явно излучены при переопределении функций setData() и setHeaderData() соответственно.
Пользовательские модели должны создавать индексы модели для использования другими компонентами. Для этого вызовите createIndex() с соответствующими номерами строки и столбца для элемента и идентификатором для него, либо как указатель, либо как целое число. Сочетание этих значений должно быть уникальным для каждого элемента. Пользовательские модели обычно используют эти уникальные идентификаторы в других переопределённых функциях для извлечения данных элемента и доступа к информации о родителях и детях элемента. Более подробную информацию об уникальных идентификаторах можно найти в примере Simple Tree Model Example.
Необязательно поддерживать все роли, определённые в Qt::ItemDataRole. В зависимости от типа данных, содержащихся в модели, может быть полезно реализовать функцию data() только для возвращения корректной информации для некоторых из более распространённых ролей. Большинство моделей предоставляют, по крайней мере, текстовое представление данных элементов для Qt::DisplayRole, и хорошо работающие модели также должны предоставлять корректную информацию для Qt::ToolTipRole и Qt::WhatsThisRole. Поддержка этих ролей позволяет использовать модели с стандартными представлениями Qt. Однако для некоторых моделей, обрабатывающих высокоспециализированные данные, может быть уместно предоставлять данные только для ролей, определённых пользователем.
Модели, предоставляющие интерфейсы к изменяемым структурам данных, могут предоставить реализации insertRows(), removeRows(), insertColumns() и removeColumns(). При реализации этих функций важно уведомлять все подключенные представления об изменениях размеров модели как до, так и после их возникновения:
- Реализация insertRows() должна вызвать beginInsertRows() до вставки новых строк в структуру данных и endInsertRows() немедленно после.
- Реализация insertColumns() должна вызвать beginInsertColumns() до вставки новых столбцов в структуру данных и endInsertColumns() немедленно после.
- Реализация removeRows() должна вызвать beginRemoveRows() до удаления строк из структуры данных и endRemoveRows() немедленно после.
- Реализация removeColumns() должна вызвать beginRemoveColumns() до удаления столбцов из структуры данных и endRemoveColumns() немедленно после.
Приватные сигналы, которые излучают эти функции, дают подключенным компонентам возможность принять меры до того, как какие-либо данные станут недоступными. Инкапсуляция операций вставки и удаления с помощью этих функций begin и end также позволяет модели правильно управлять постоянными индексами модели. Если вы хотите, чтобы выделения обрабатывались должным образом, вы должны убедиться, что вызываете эти функции. Если вы вставляете или удаляете элемент с потомками, вам не нужно вызывать эти функции для дочерних элементов. Другими словами, родительский элемент позаботится о своих дочерних элементах.
Для создания моделей, которые заполняются постепенно, можно переопределить fetchMore() и canFetchMore(). Если переопределение fetchMore() добавляет строки в модель, beginInsertRows() и endInsertRows() должны быть вызваны.
См. также Классы моделей, Справочник по наследованию моделей, QModelIndex, QAbstractItemView, Использование перетаскивания с помощью представлений элементов, Simple DOM Model Example, Simple Tree Model Example, Editable Tree Model Example и Fetch More Example.
Документация по типам членов
[since 5.11] перечисление QAbstractItemModel::CheckIndexOptionфлаги QAbstractItemModel::CheckIndexOptions
Это перечисление может использоваться для управления проверками, выполняемыми QAbstractItemModel::checkIndex().
| Константа | Значение | Описание |
|---|---|---|
QAbstractItemModel::CheckIndexOption::NoOption |
0x0000 |
Нет указанных параметров проверки. |
QAbstractItemModel::CheckIndexOption::IndexIsValid |
0x0001 |
Индекс модели, переданный QAbstractItemModel::checkIndex(), проверяется на то, является ли он допустимым индексом модели. |
QAbstractItemModel::CheckIndexOption::DoNotUseParent |
0x0002 |
Не выполняет никакой проверки, связанной с использованием родителя индекса, переданного QAbstractItemModel::checkIndex(). |
QAbstractItemModel::CheckIndexOption::ParentIsInvalid |
0x0004 |
Родитель индекса модели, переданного QAbstractItemModel::checkIndex(), проверяется на то, является ли он недопустимым индексом модели. Если оба параметра, этот параметр и DoNotUseParent, указаны, этот параметр игнорируется. |
Это перечисление было введено или изменено в Qt 5.11.
Тип CheckIndexOptions является псевдонимом для QFlags<CheckIndexOption>. Он хранит объединение значений CheckIndexOption с помощью операции OR.
enum QAbstractItemModel::LayoutChangeHint
Это перечисление описывает способ изменения макета модели.
| Константа | Значение | Описание |
|---|---|---|
QAbstractItemModel::NoLayoutChangeHint |
0 |
Нет доступных подсказок. |
QAbstractItemModel::VerticalSortHint |
1 |
Строки сортируются. |
QAbstractItemModel::HorizontalSortHint |
2 |
Столбцы сортируются. |
Обратите внимание, что VerticalSortHint и HorizontalSortHint означают, что элементы перемещаются в рамках одного родителя, а не перемещаются в другой родительский элемент в модели, и не отфильтровываются и не добавляются.
Документация по функциям-членам
QAbstractItemModel::QAbstractItemModel(QObject *parent = nullptr)
Конструирует абстрактную модель элементов с заданным parent.
[private signal] void QAbstractItemModel::columnsAboutToBeInserted(const QModelIndex &parent, int first, int last)
Этот сигнал испускается непосредственно перед вставкой столбцов в модель. Новые элементы будут размещены между first и last включительно, под заданным элементом parent.
Примечание: Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям в размерах модели. Он может испускаться только реализацией QAbstractItemModel, и не может быть явно испущен в коде подкласса.
Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может испускаться пользователем.
См. также insertColumns() и beginInsertColumns().
[private signal] void QAbstractItemModel::columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn)
Этот сигнал испускается непосредственно перед перемещением столбцов в модели. Элементы, которые будут перемещены, находятся между sourceStart и sourceEnd включительно, под заданным элементом sourceParent. Они будут перемещены в destinationParent, начиная со столбца destinationColumn.
Примечание: Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям в размерах модели. Он может испускаться только реализацией QAbstractItemModel, и не может быть явно испущен в коде подкласса.
Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может испускаться пользователем.
См. также beginMoveRows().
[private signal] void QAbstractItemModel::columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last)
Этот сигнал испускается непосредственно перед удалением столбцов из модели. Удаляемые элементы находятся между first и last включительно, под заданным элементом parent.
Примечание: Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям в размерах модели. Он может испускаться только реализацией QAbstractItemModel, и не может быть явно испущен в коде подкласса.
Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может испускаться пользователем.
См. также removeColumns() и beginRemoveColumns().
[private signal] void QAbstractItemModel::columnsInserted(const QModelIndex &parent, int first, int last)
Этот сигнал испускается после вставки столбцов в модель. Новые элементы находятся между first и last включительно, под заданным элементом parent.
Примечание: Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям в размерах модели. Он может испускаться только реализацией QAbstractItemModel, и не может быть явно испущен в коде подкласса.
Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может испускаться пользователем.
См. также insertColumns() и beginInsertColumns().
[private signal] void QAbstractItemModel::columnsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int column)
Этот сигнал испускается после перемещения столбцов в модели. Элементы между start и end включительно, под заданным элементом parent, были перемещены в destination, начиная со столбца column.
Примечание: Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям в размерах модели. Он может испускаться только реализацией QAbstractItemModel, и не может быть явно испущен в коде подкласса.
Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может испускаться пользователем.
См. также beginMoveRows().
[private signal] void QAbstractItemModel::columnsRemoved(const QModelIndex &parent, int first, int last)
Этот сигнал испускается после удаления столбцов из модели. Удаленные элементы находятся между first и last включительно, под заданным элементом parent.
Примечание: Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям в размерах модели. Он может испускаться только реализацией QAbstractItemModel, и не может быть явно испущен в коде подкласса.
Примечание: Это частный сигнал. Он может использоваться в подключениях сигналов, но не может испускаться пользователем.
См. также removeColumns() и beginRemoveColumns().
[signal] void QAbstractItemModel::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles = QList<int>())
Этот сигнал испускается всякий раз, когда данные в существующем элементе изменяются.
Если элементы имеют одного родителя, то затронутые элементы находятся между topLeft и bottomRight включительно. Если элементы имеют разных родителей, поведение не определено.
При переопределении функции setData() этот сигнал должен быть явно испущен.
Необязательный аргумент roles может использоваться для указания ролей данных, которые фактически были изменены. Пустой вектор в аргументе roles означает, что все роли должны рассматриваться как изменённые. Порядок элементов в аргументе roles не имеет значения.
См. также headerDataChanged(), setData() и layoutChanged().
[signal] void QAbstractItemModel::headerDataChanged(Qt::Orientation orientation, int first, int last)
Этот сигнал испускается всякий раз, когда заголовок меняется. orientation указывает, изменился ли горизонтальный или вертикальный заголовок. Разделы заголовка с first по last необходимо обновить.
При переопределении функции setHeaderData() этот сигнал должен быть явно испущен.
Если вы изменяете количество столбцов или строк, вам не нужно испускать этот сигнал, но используйте функции begin/end (см. раздел о наследовании в описании класса QAbstractItemModel для получения подробностей).
См. также headerData(), setHeaderData() и dataChanged().
[signal, since 5.0] void QAbstractItemModel::layoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint)
Этот сигнал испускается непосредственно перед изменением макета модели. Компоненты, подключённые к этому сигналу, используют его для адаптации к изменениям в макете модели.
Подклассы должны обновить все постоянные индексы модели после испускания layoutAboutToBeChanged().
Необязательный параметр parents используется для более конкретного уведомления о том, какие части макета модели изменяются. Пустой список указывает на изменение макета всей модели. Порядок элементов в списке parents не имеет значения. Необязательный параметр hint используется для указания того, что происходит во время перестроения модели.
Эта функция была введена в Qt 5.0.
См. также layoutChanged() и changePersistentIndex().
[signal, since 5.0] void QAbstractItemModel::layoutChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint)
Этот сигнал излучается всякий раз, когда изменяется расположение элементов, представленных моделью; например, при сортировке модели. При получении этого сигнала представлением оно должно обновить расположение элементов, чтобы отразить это изменение.
При наследовании от QAbstractItemModel или QAbstractProxyModel убедитесь, что вы излучаете layoutAboutToBeChanged() перед изменением порядка элементов или структуры данных, которые вы предоставляете представлениям, и излучаете layoutChanged() после изменения расположения.
Необязательный параметр parents используется для более точного уведомления о том, какие части расположения модели изменяются. Пустой список указывает на изменение расположения всей модели. Порядок элементов в списке parents не существенен. Необязательный параметр hint используется для указания информации о том, что происходит во время перераспределения модели.
Подклассы должны обновлять любые постоянные индексы модели перед излучением layoutChanged(). Другими словами, при изменении структуры:
- излучайте layoutAboutToBeChanged
- Запомните QModelIndex, который изменится
- Обновите свои внутренние данные
- Вызовите changePersistentIndex()
- излучайте layoutChanged
Эта функция была представлена в Qt 5.0.
См. также layoutAboutToBeChanged(), dataChanged(), headerDataChanged(), modelReset(), и changePersistentIndex().
[private signal] void QAbstractItemModel::modelAboutToBeReset()
Этот сигнал излучается при вызове beginResetModel(), перед тем, как внутреннее состояние модели (например, постоянные индексы модели) будет сделано недействительным.
Примечание: Этот сигнал является закрытым. Его можно использовать в соединениях сигналов, но он не может быть излучен пользователем.
См. также beginResetModel() и modelReset().
[private signal] void QAbstractItemModel::modelReset()
Этот сигнал излучается при вызове endResetModel(), после того, как внутреннее состояние модели (например, постоянные индексы модели) будет сделано недействительным.
Обратите внимание, что при сбросе модели следует считать, что вся информация, ранее полученная из нее, является недействительной. Это включает, но не ограничивается, rowCount() и columnCount(), flags(), данные, полученные через data(), и roleNames().
Примечание: Этот сигнал является закрытым. Его можно использовать в соединениях сигналов, но он не может быть излучен пользователем.
См. также endResetModel() и modelAboutToBeReset().
[virtual protected slot] void QAbstractItemModel::resetInternalData()
Этот слот вызывается сразу после того, как внутренние данные модели очищены во время сброса.
Этот слот предоставляет удобство для подклассов конкретных моделей-прокси, таких как подклассы QSortFilterProxyModel, которые поддерживают дополнительные данные.
class CustomDataProxy : public QSortFilterProxyModel
{
Q_OBJECT
public:
CustomDataProxy(QObject *parent)
: QSortFilterProxyModel(parent)
{
}
...
QVariant data(const QModelIndex &index, int role) override
{
if (role != Qt::BackgroundRole)
return QSortFilterProxyModel::data(index, role);
if (m_customData.contains(index.row()))
return m_customData.value(index.row());
return QSortFilterProxyModel::data(index, role);
}
private slots:
void resetInternalData()
{
m_customData.clear();
}
private:
QHash<int, QVariant> m_customData;
}; Примечание: Из-за ошибки этот слот отсутствует в Qt 5.0.
См. также modelAboutToBeReset() и modelReset().
[virtual slot] void QAbstractItemModel::revert()
Уведомляет модель о необходимости отбросить кэшированную информацию. Эта функция обычно используется для редактирования строк.
См. также submit().
[private signal] void QAbstractItemModel::rowsAboutToBeInserted(const QModelIndex &parent, int start, int end)
Этот сигнал излучается непосредственно перед вставкой строк в модель. Новые элементы будут размещены между start и end включительно, под заданным элементом parent.
Примечание: Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям размеров модели. Он может быть излучен только реализацией QAbstractItemModel, и его нельзя явно излучать в коде подкласса.
Примечание: Этот сигнал является закрытым. Его можно использовать в соединениях сигналов, но он не может быть излучен пользователем.
См. также insertRows() и beginInsertRows().
[private signal] void QAbstractItemModel::rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow)
Этот сигнал излучается непосредственно перед перемещением строк внутри модели. Элементы, которые будут перемещены, находятся между sourceStart и sourceEnd включительно, под заданным элементом sourceParent. Они будут перемещены в destinationParent, начиная со строки destinationRow.
Примечание: Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям размеров модели. Он может быть излучен только реализацией QAbstractItemModel, и его нельзя явно излучать в коде подкласса.
Примечание: Этот сигнал является закрытым. Его можно использовать в соединениях сигналов, но он не может быть излучен пользователем.
См. также beginMoveRows().
[private signal] void QAbstractItemModel::rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last)
Этот сигнал излучается непосредственно перед удалением строк из модели. Элементы, которые будут удалены, находятся между first и last включительно, под заданным элементом parent.
Примечание: Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям размеров модели. Он может быть излучен только реализацией QAbstractItemModel, и его нельзя явно излучать в коде подкласса.
Примечание: Этот сигнал является закрытым. Его можно использовать в соединениях сигналов, но он не может быть излучен пользователем.
См. также removeRows() и beginRemoveRows().
[private signal] void QAbstractItemModel::rowsInserted(const QModelIndex &parent, int first, int last)
Этот сигнал излучается после вставки строк в модель. Новые элементы находятся между first и last включительно, под заданным элементом parent.
Примечание: Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям размеров модели. Он может быть излучен только реализацией QAbstractItemModel, и его нельзя явно излучать в коде подкласса.
Примечание: Этот сигнал является закрытым. Его можно использовать в соединениях сигналов, но он не может быть излучен пользователем.
См. также insertRows() и beginInsertRows().
[private signal] void QAbstractItemModel::rowsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row)
Этот сигнал излучается после перемещения строк внутри модели. Элементы между start и end включительно, под заданным элементом parent, были перемещены в destination, начиная со строки row.
Примечание: Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям размеров модели. Он может быть излучен только реализацией QAbstractItemModel, и его нельзя явно излучать в коде подкласса.
Примечание: Этот сигнал является закрытым. Его можно использовать в соединениях сигналов, но он не может быть излучен пользователем.
См. также beginMoveRows().
[private signal] void QAbstractItemModel::rowsRemoved(const QModelIndex &parent, int first, int last)
Этот сигнал излучается после удаления строк из модели. Удаленные элементы находятся между first и last включительно, под заданным элементом parent.
Примечание: Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям размеров модели. Он может быть излучен только реализацией QAbstractItemModel, и его нельзя явно излучать в коде подкласса.
Примечание: Этот сигнал является закрытым. Его можно использовать в соединениях сигналов, но он не может быть излучен пользователем.
См. также removeRows() и beginRemoveRows().
[virtual slot] bool QAbstractItemModel::submit()
Уведомляет модель о необходимости отправить кэшированную информацию в постоянное хранилище. Эта функция обычно используется для редактирования строк.
Возвращает true если ошибка отсутствует; в противном случае возвращает false.
См. также revert().
[virtual] QAbstractItemModel::~QAbstractItemModel()
Удаляет абстрактную модель элементов.
[protected] void QAbstractItemModel::beginInsertColumns(const QModelIndex &parent, int first, int last)
Начинает операцию вставки столбцов.
При переопределении insertColumns() в подклассе необходимо вызвать эту функцию перед вставкой данных в базовый хранилище данных модели.
Индекс parent соответствует родительскому элементу, в который вставляются новые столбцы; first и last — номера столбцов новых столбцов после их вставки.
| Укажите начальный и конечный номера столбцов для вставки диапазона столбцов в элемент модели. Например, как показано на диаграмме, мы вставляем три столбца перед столбцом 4, поэтому first — 4, а last — 6: beginInsertColumns(parent, 4, 6); Это вставит три новых столбца как столбцы 4, 5 и 6. |
|
| Чтобы добавить столбцы, вставьте их после последнего столбца. Например, как показано на диаграмме, мы добавляем три столбца к набору из шести существующих столбцов (оканчивающихся столбцом 5), поэтому first — 6, а last — 8: beginInsertColumns(parent, 6, 8); Это добавляет два новых столбца как столбцы 6, 7 и 8. |
Примечание: Эта функция излучает сигнал columnsAboutToBeInserted(), который подключенные представления (или прокси) должны обработать перед вставкой данных. В противном случае представления могут оказаться в недопустимом состоянии.
См. также endInsertColumns().
[protected] void QAbstractItemModel::beginInsertRows(const QModelIndex &parent, int first, int last)
Начинает операцию вставки строк.
При переопределении insertRows() в подклассе необходимо вызвать эту функцию перед вставкой данных в базовый хранилище данных модели.
Индекс parent соответствует родительскому элементу, в который вставляются новые строки; first и last — номера строк, которые будут иметь новые строки после их вставки.
| Укажите начальный и конечный номера строк для вставки диапазона строк в элемент модели. Например, как показано на диаграмме, мы вставляем три строки перед строкой 2, поэтому first — 2, а last — 4: beginInsertRows(parent, 2, 4); Это вставит три новые строки как строки 2, 3 и 4. |
|
| Чтобы добавить строки, вставьте их после последней строки. Например, как показано на диаграмме, мы добавляем две строки к набору из 4 существующих строк (заканчивающихся строкой 3), поэтому first — 4, а last — 5: beginInsertRows(parent, 4, 5); Это добавляет две новые строки как строки 4 и 5. |
Примечание: Эта функция излучает сигнал rowsAboutToBeInserted(), который подключенные представления (или прокси) должны обработать перед вставкой данных. В противном случае представления могут оказаться в недопустимом состоянии.
См. также endInsertRows().
[protected] bool QAbstractItemModel::beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild)
Начинает операцию перемещения столбцов.
При переопределении в подклассе этот метод упрощает перемещение сущностей в вашей модели. Этот метод отвечает за перемещение постоянных индексов в модели, что в противном случае вам пришлось бы сделать самостоятельно. Использование beginMoveColumns и endMoveColumns — альтернатива прямому излучению layoutAboutToBeChanged и layoutChanged вместе с changePersistentIndex.
Индекс sourceParent соответствует родительскому элементу, из которого перемещаются столбцы; sourceFirst и sourceLast — номера первого и последнего столбцов, подлежащих перемещению. Индекс destinationParent соответствует родительскому элементу, в который перемещаются эти столбцы. destinationChild — столбец, в который будут перемещены столбцы. То есть индекс столбца sourceFirst в sourceParent станет столбцом destinationChild в destinationParent, за ним последуют все остальные столбцы до sourceLast.
Однако при перемещении столбцов вниз в том же родительском элементе (sourceParent и destinationParent равны) столбцы будут размещены перед индексом destinationChild. То есть, если вы хотите переместить столбцы 0 и 1, чтобы они стали столбцами 1 и 2, destinationChild должен быть 3. В этом случае новый индекс для исходного столбца i (который находится между sourceFirst и sourceLast) равен (destinationChild-sourceLast-1+i).
Обратите внимание, что если sourceParent и destinationParent одинаковы, вы должны убедиться, что destinationChild не находится в диапазоне от sourceFirst до sourceLast + 1. Вы также должны убедиться, что не пытаетесь переместить столбец в одного из его собственных потомков или предков. Этот метод возвращает false, если любое из этих условий истинно, в этом случае вы должны прервать операцию перемещения.
См. также endMoveColumns().
[protected] bool QAbstractItemModel::beginMoveRows(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild)
Начинает операцию перемещения строк.
При переопределении в подклассе этот метод упрощает перемещение сущностей в вашей модели. Этот метод отвечает за перемещение постоянных индексов в модели, что в противном случае вам пришлось бы сделать самостоятельно. Использование beginMoveRows и endMoveRows — альтернатива прямому излучению layoutAboutToBeChanged и layoutChanged вместе с changePersistentIndex.
Индекс sourceParent соответствует родительскому элементу, из которого перемещаются строки; sourceFirst и sourceLast — номера первой и последней строк, подлежащих перемещению. Индекс destinationParent соответствует родительскому элементу, в который перемещаются эти строки. destinationChild — строка, в которую будут перемещены строки. То есть индекс строки sourceFirst в sourceParent станет строкой destinationChild в destinationParent, за ней последуют все остальные строки до sourceLast.
Однако при перемещении строк вниз в том же родительском элементе (sourceParent и destinationParent равны) строки будут размещены перед индексом destinationChild. То есть, если вы хотите переместить строки 0 и 1, чтобы они стали строками 1 и 2, destinationChild должен быть 3. В этом случае новый индекс для исходной строки i (которая находится между sourceFirst и sourceLast) равен (destinationChild-sourceLast-1+i).
Обратите внимание, что если sourceParent и destinationParent одинаковы, вы должны убедиться, что destinationChild не находится в диапазоне от sourceFirst до sourceLast + 1. Вы также должны убедиться, что не пытаетесь переместить строку в одного из ее собственных потомков или предков. Этот метод возвращает false, если любое из этих условий истинно, в этом случае вы должны прервать операцию перемещения.
| Укажите начальный и конечный номера строк для диапазона строк в родительском элементе источника, которые вы хотите переместить в модели. Также укажите строку в родительском элементе назначения, куда нужно переместить диапазон. Например, как показано на диаграмме, мы перемещаем три строки из строки 2 в 4 в источнике, поэтому sourceFirst — 2, а sourceLast — 4. Мы перемещаем эти элементы выше строки 2 в назначении, поэтому destinationChild — 2. beginMoveRows(sourceParent, 2, 4, destinationParent, 2); Это перемещает три строки 2, 3 и 4 в источнике в 2, 3 и 4 в назначении. Другие затронутые элементы смещаются соответствующим образом. |
|
| Чтобы добавить строки в другой родительский элемент, переместите их после последней строки. Например, как показано на диаграмме, мы перемещаем три строки в набор из 6 существующих строк (заканчивающихся строкой 5), поэтому destinationChild — 6: beginMoveRows(sourceParent, 2, 4, destinationParent, 6); Это перемещает целевые строки в конец целевого родительского элемента как 6, 7 и 8. |
|
| Чтобы переместить строки в рамках одного родительского элемента, укажите строку, в которую нужно их переместить. Например, как показано на диаграмме, мы перемещаем один элемент из строки 2 в строку 0, поэтому sourceFirst и sourceLast — 2, а destinationChild — 0. beginMoveRows(parent, 2, 2, parent, 0); Обратите внимание, что другие строки могут сместиться соответствующим образом. Обратите также внимание, что при перемещении элементов в рамках одного родительского элемента вы не должны пытаться выполнять недействительные или бесполезные перемещения. В приведенном выше примере элемент 2 находится в строке 2 до перемещения, поэтому его нельзя переместить в строку 2 (где он уже есть) или строку 3 (бесполезно, так как строка 3 означает выше строки 3, где он уже есть) |
|
| Чтобы переместить строки в рамках одного родительского элемента, укажите строку, в которую нужно их переместить. Например, как показано на диаграмме, мы перемещаем один элемент из строки 2 в строку 4, поэтому sourceFirst и sourceLast — 2, а destinationChild — 4. beginMoveRows(parent, 2, 2, parent, 4); Обратите внимание, что другие строки могут сместиться соответствующим образом. |
См. также endMoveRows().
[protected] void QAbstractItemModel::beginRemoveColumns(const QModelIndex &parent, int first, int last)
Начинает операцию удаления столбцов.
При повторной реализации removeColumns() в подклассе, вы должны вызвать эту функцию перед удалением данных из базового хранилища данных модели.
Индекс parent соответствует родительскому элементу, из которого удаляются новые столбцы; first и last — номера столбцов первого и последнего удаляемых столбцов.
| Укажите номера первого и последнего столбцов для диапазона столбцов, которые вы хотите удалить из элемента в модели. Например, как показано на диаграмме, мы удаляем три столбца со столбца 4 до столбца 6, поэтому first равен 4, а last равен 6: beginRemoveColumns(parent, 4, 6); |
Примечание: Эта функция излучает сигнал columnsAboutToBeRemoved(), который подключенные представления (или прокси) должны обработать до удаления данных. В противном случае представления могут оказаться в недопустимом состоянии.
См. также endRemoveColumns().
[protected] void QAbstractItemModel::beginRemoveRows(const QModelIndex &parent, int first, int last)
Начинает операцию удаления строк.
При повторной реализации removeRows() в подклассе вы должны вызвать эту функцию перед удалением данных из базового хранилища данных модели.
Индекс parent соответствует родительскому элементу, из которого удаляются новые строки; first и last — номера строк удаляемых строк.
| Укажите номера первой и последней строк для диапазона строк, которые вы хотите удалить из элемента в модели. Например, как показано на диаграмме, мы удаляем две строки со строки 2 до строки 3, поэтому first равен 2, а last равен 3: beginRemoveRows(parent, 2, 3); |
Примечание: Эта функция излучает сигнал rowsAboutToBeRemoved(), который подключенные представления (или прокси) должны обработать до удаления данных. В противном случае представления могут оказаться в недопустимом состоянии.
См. также endRemoveRows().
[protected] void QAbstractItemModel::beginResetModel()
Начинает операцию сброса модели.
Операция сброса сбрасывает модель в ее текущее состояние во всех присоединенных представлениях.
Примечание: Любые представления, подключенные к этой модели, также будут сброшены.
Когда модель сбрасывается, это означает, что любые предыдущие данные, предоставленные моделью, теперь недействительны и должны быть запрошены заново. Это также означает, что текущий элемент и любые выделенные элементы станут недействительными.
Когда модель радикально меняет свои данные, иногда проще просто вызвать эту функцию, а не излучать dataChanged(), чтобы сообщать другим компонентам, когда изменился базовый источник данных или его структура.
Вы должны вызвать эту функцию перед сбросом внутренних структур данных в вашей модели или прокси-модели.
Эта функция излучает сигнал modelAboutToBeReset().
См. также modelAboutToBeReset(), modelReset() и endResetModel().
[virtual] QModelIndex QAbstractItemModel::buddy(const QModelIndex &index) const
Возвращает индекс модели для дубликата элемента, представленного index. Когда пользователь хочет отредактировать элемент, представление вызовет эту функцию, чтобы проверить, следует ли вместо этого отредактировать другой элемент в модели. Затем представление создаст делегат с использованием индекса модели, возвращенного элементом дубликата.
В реализации по умолчанию каждый элемент является своим собственным дубликатом.
[virtual] bool QAbstractItemModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const
Возвращает true значение, если модель может принять падение data. Эта реализация по умолчанию проверяет только наличие хотя бы одного формата в списке mimeTypes() и если action входит в список supportedDropActions() модели.
Переопределите эту функцию в своей пользовательской модели, если вы хотите проверить, можно ли опустить data в row, column, parent с action. Если такая проверка вам не нужна, переопределять эту функцию необязательно.
См. также dropMimeData() и Использование перетаскивания и опускания с представлениями элементов.
[virtual invokable] bool QAbstractItemModel::canFetchMore(const QModelIndex &parent) const
Возвращает true значение, если для parent имеются дополнительные данные; в противном случае возвращает false.
Реализация по умолчанию всегда возвращает false.
Если canFetchMore() возвращает true, функция fetchMore() должна быть вызвана. Это поведение QAbstractItemView, например.
Примечание: Эта функция может быть вызвана через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также fetchMore().
[protected] void QAbstractItemModel::changePersistentIndex(const QModelIndex &from, const QModelIndex &to)
Изменяет QPersistentModelIndex, равный данному индексу модели from, на данный индекс модели to.
Если не было найдено постоянного индекса модели, равного заданному индексу модели from, ничего не меняется.
См. также persistentIndexList() и changePersistentIndexList().
[protected] void QAbstractItemModel::changePersistentIndexList(const QModelIndexList &from, const QModelIndexList &to)
Изменяет {QPersistentModelIndex} равные индексам в заданном списке индексов модели from на заданный список индексов модели to.
Если не было найдено постоянных индексов модели, равных индексам в заданном списке индексов модели from, ничего не меняется.
См. также persistentIndexList() и changePersistentIndex().
[since 5.11] bool QAbstractItemModel::checkIndex(const QModelIndex &index, QAbstractItemModel::CheckIndexOptions options = CheckIndexOption::NoOption) const
Эта функция проверяет, является ли index законным индексом модели для этой модели. Законный индекс модели — это либо недействительный индекс модели, либо действительный индекс модели, для которого выполняются следующие условия:
- модель индекса —
this; - строка индекса не меньше нуля;
- строка индекса меньше количества строк для родителя индекса;
- столбец индекса не меньше нуля;
- столбец индекса меньше количества столбцов для родителя индекса.
Аргумент options может изменить некоторые из этих проверок. Если options содержит IndexIsValid, то index должен быть действительным индексом; это полезно при реализации функций, таких как data() или setData(), которые ожидают действительные индексы.
Если options содержит DoNotUseParent, то проверки, которые вызывали бы parent(), опускаются; это позволяет вызывать эту функцию из реализации parent() (иначе это приведет к бесконечной рекурсии и сбою).
Если options не содержит DoNotUseParent, и содержит ParentIsInvalid, то выполняется дополнительная проверка: проверяется, что индекс родителя недействителен. Это полезно при реализации плоских моделей, таких как списки или таблицы, где у индекса модели не должно быть действительного индекса родителя.
Эта функция возвращает true, если все проверки прошли успешно, и false в противном случае. Это позволяет использовать функцию в Q_ASSERT и аналогичных механизмах отладки. Если какая-либо проверка завершилась неудачей, в категории регистрации qt.core.qabstractitemmodel.checkindex будет выведено сообщение с предупреждением, содержащее информацию, которая может быть полезна для отладки причины ошибки.
Примечание: Эта функция — вспомогательный инструмент отладки для реализации собственных моделей элементов. При разработке сложных моделей, а также при создании сложных иерархий моделей (например, с использованием прокси-моделей) полезно вызывать эту функцию для выявления ошибок, связанных с недействительными индексами модели (как определено выше), случайно переданными в API QAbstractItemModel.
Предупреждение: Обратите внимание, что передача недействительных индексов в модели — это неопределённое поведение, поэтому приложения должны этого избегать и не полагаться на какую-либо «защитную» программу, которую модели элементов могут использовать для обработки недействительных индексов.
Эта функция была добавлена в Qt 5.11.
См. также QModelIndex.
[virtual, since 6.0] bool QAbstractItemModel::clearItemData(const QModelIndex &index)
Удаляет данные, хранящиеся во всех ролях для данного индекса. Возвращает true при успехе; в противном случае возвращает false. Сигнал dataChanged() должен быть выпущен, если данные были успешно удалены. Реализация базового класса возвращает false
Эта функция была добавлена в Qt 6.0.
См. также data(), itemData(), setData() и setItemData().
[pure virtual invokable] int QAbstractItemModel::columnCount(const QModelIndex &parent = QModelIndex()) const
Возвращает количество столбцов для дочерних элементов данного родителя.
В большинстве подклассов количество столбцов не зависит от родителя.
Например:
int DomModel::columnCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return 3;
} Примечание: При реализации модели на основе таблицы, columnCount() должен возвращать 0, когда родитель действителен.
Примечание: Эту функцию можно вызывать через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также rowCount().
[protected] QModelIndex QAbstractItemModel::createIndex(int row, int column, const void *ptr = nullptr) const
Создаёт индекс модели для заданной строки и столбца с внутренним указателем ptr.
При использовании QSortFilterProxyModel, его индексы имеют собственный внутренний указатель. Не рекомендуется обращаться к этому внутреннему указателю за пределами модели. Используйте функцию data() вместо этого.
Эта функция обеспечивает согласованный интерфейс, который должны использовать подклассы моделей для создания индексов модели.
[protected] QModelIndex QAbstractItemModel::createIndex(int row, int column, quintptr id) const
Создаёт индекс модели для заданной строки и столбца с внутренним идентификатором id.
Эта функция обеспечивает согласованный интерфейс, который должны использовать подклассы моделей для создания индексов модели.
См. также QModelIndex::internalId().
[pure virtual invokable] QVariant QAbstractItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const
Возвращает данные, хранящиеся под заданной ролью для элемента, на который ссылается индекс.
Примечание: Если у вас нет значения для возврата, верните недействительный QVariant вместо возвращения 0.
Примечание: Эту функцию можно вызывать через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также Qt::ItemDataRole, setData() и headerData().
[virtual] bool QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
Обрабатывает данные, предоставленные операцией перетаскивания и опускания, которая завершилась с заданным действием.
Возвращает true если данные и действие были обработаны моделью; в противном случае возвращает false.
Указанные строка, столбец и родитель указывают на местоположение элемента в модели, где завершилась операция. Модель отвечает за завершение действия в правильном месте.
Например, действие опускания на элемент в QTreeView может привести к вставке новых элементов либо в качестве дочерних элементов элемента, указанного строкой, столбцом и родителем, либо в качестве братьев и сестер элемента.
Когда строка и столбец равны -1, это означает, что перетаскиваемые данные следует рассматривать как опущенные непосредственно на родителя. Обычно это означает добавление данных в качестве дочерних элементов родителя. Если строка и столбец больше или равны нулю, это означает, что опускание произошло непосредственно перед указанной строкой и столбцом в указанном родителе.
Член mimeTypes() вызывается для получения списка допустимых типов MIME. Эта реализация по умолчанию предполагает реализацию по умолчанию для mimeTypes(), которая возвращает единственный тип MIME по умолчанию. Если вы переопределяете mimeTypes() в своей пользовательской модели, чтобы вернуть несколько типов MIME, вы должны переопределить эту функцию, чтобы использовать их.
См. также supportedDropActions(), canDropMimeData() и Использование перетаскивания и опускания с элементами представлений.
[protected] void QAbstractItemModel::endInsertColumns()
Завершает операцию вставки столбцов.
При переопределении insertColumns() в подклассе вы должны вызвать эту функцию после вставки данных в базовый хранилище данных модели.
См. также beginInsertColumns().
[protected] void QAbstractItemModel::endInsertRows()
Завершает операцию вставки строк.
При переопределении insertRows() в подклассе вы должны вызвать эту функцию после вставки данных в базовый хранилище данных модели.
См. также beginInsertRows().
[protected] void QAbstractItemModel::endMoveColumns()
Завершает операцию перемещения столбцов.
При реализации подкласса вы должны вызвать эту функцию после перемещения данных в базовом хранилище данных модели.
См. также beginMoveColumns().
[protected] void QAbstractItemModel::endMoveRows()
Завершает операцию перемещения строк.
При реализации подкласса вы должны вызвать эту функцию после перемещения данных в базовом хранилище данных модели.
См. также beginMoveRows().
[protected] void QAbstractItemModel::endRemoveColumns()
Завершает операцию удаления столбцов.
При переопределении removeColumns() в подклассе вы должны вызвать эту функцию после удаления данных из базового хранилища данных модели.
См. также beginRemoveColumns().
[protected] void QAbstractItemModel::endRemoveRows()
Завершает операцию удаления строк.
При переопределении removeRows() в подклассе вы должны вызвать эту функцию после удаления данных из базового хранилища данных модели.
См. также beginRemoveRows().
[protected] void QAbstractItemModel::endResetModel()
Завершает операцию сброса модели.
Вы должны вызвать эту функцию после сброса любой внутренней структуры данных в вашей модели или прокси-модели.
Эта функция излучает сигнал modelReset().
См. также beginResetModel().
[virtual invokable] void QAbstractItemModel::fetchMore(const QModelIndex &parent)
Загружает любые доступные данные для элементов с родителем, указанным индексом родитель.
Переопределите эту функцию, если вы заполняете свою модель по частям.
Реализация по умолчанию ничего не делает.
Примечание: Эту функцию можно вызывать через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также canFetchMore().
[virtual invokable] Qt::ItemFlags QAbstractItemModel::flags(const QModelIndex &index) const
Возвращает флаги элемента для данного индекса.
Реализация базового класса возвращает комбинацию флагов, которые позволяют использовать элемент (ItemIsEnabled) и позволяют его выделять (ItemIsSelectable).
Примечание: Эту функцию можно вызывать через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также Qt::ItemFlags.
[virtual invokable] bool QAbstractItemModel::hasChildren(const QModelIndex &parent = QModelIndex()) const
Возвращает true если родитель имеет какие-либо дочерние элементы; в противном случае возвращает false.
Используйте rowCount() на родителе, чтобы узнать количество дочерних элементов.
Обратите внимание, что поведение при отчётности о наличии дочерних элементов для определённого индекса с помощью данного метода, если для этого индекса установлен флаг Qt::ItemNeverHasChildren, не определено.
Примечание: Эту функцию можно вызывать через систему метаобъектов и из QML. См. Q_INVOKABLE.
[invokable] bool QAbstractItemModel::hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const
Возвращает true, если модель возвращает допустимый QModelIndex для row и column с parent, в противном случае возвращает false.
Примечание: Эта функция может вызываться через систему метаобъектов и из QML. См. Q_INVOKABLE.
[virtual invokable] QVariant QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
Возвращает данные для заданного role и section в заголовке со значением orientation.
Для горизонтальных заголовков номер секции соответствует номеру столбца. Аналогично, для вертикальных заголовков номер секции соответствует номеру строки.
Примечание: Эта функция может вызываться через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также Qt::ItemDataRole, setHeaderData() и QHeaderView.
[pure virtual invokable] QModelIndex QAbstractItemModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const
Возвращает индекс элемента в модели, заданный заданной строкой, столбцом и индексом родителя.
При переопределении этой функции в подклассе вызывайте createIndex(), чтобы сгенерировать индексы модели, которые другие компоненты могут использовать для ссылки на элементы в вашей модели.
Примечание: Эта функция может вызываться через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также createIndex().
bool QAbstractItemModel::insertColumn(int column, const QModelIndex &parent = QModelIndex())
Вставляет один столбец перед заданным column в дочерние элементы parent, указанные.
Возвращает true если столбец вставлен; в противном случае возвращает false.
См. также insertColumns(), insertRow() и removeColumn().
[virtual] bool QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
В моделях, поддерживающих это, вставляет count новых столбцов в модель перед заданным column. Элементы в каждом новом столбце будут дочерними для элемента, представленного индексом модели parent.
Если column равен 0, столбцы добавляются в начало любых существующих столбцов.
Если column равен columnCount(), столбцы добавляются в конец любых существующих столбцов.
Если у parent нет дочерних элементов, вставляется одна строка с count столбцами.
Возвращает true если столбцы были успешно вставлены; в противном случае возвращает false.
Реализация базового класса ничего не делает и возвращает false.
Если вы реализуете собственную модель, вы можете переопределить эту функцию, если хотите поддерживать вставки. В качестве альтернативы, вы можете предоставить собственный API для изменения данных.
См. также insertRows(), removeColumns(), beginInsertColumns() и endInsertColumns().
bool QAbstractItemModel::insertRow(int row, const QModelIndex &parent = QModelIndex())
Вставляет одну строку перед заданной row в дочерние элементы указанного parent.
Примечание: Эта функция вызывает виртуальный метод insertRows.
Возвращает true если строка вставлена; в противном случае возвращает false.
См. также insertRows(), insertColumn() и removeRow().
[virtual] bool QAbstractItemModel::insertRows(int row, int count, const QModelIndex &parent = QModelIndex())
Примечание: Реализация базового класса этой функции ничего не делает и возвращает false.
В моделях, поддерживающих это, вставляет count строк в модель перед заданной row. Элементы в новой строке будут дочерними для элемента, представленного индексом модели parent.
Если row равен 0, строки добавляются в начало любых существующих строк родителя.
Если row равен rowCount(), строки добавляются в конец любых существующих строк родителя.
Если у parent нет дочерних элементов, вставляется один столбец с count строками.
Возвращает true если строки были успешно вставлены; в противном случае возвращает false.
Если вы реализуете собственную модель, вы можете переопределить эту функцию, если хотите поддерживать вставки. В качестве альтернативы, вы можете предоставить собственный API для изменения данных. В любом случае, вам нужно вызвать beginInsertRows() и endInsertRows(), чтобы уведомить другие компоненты о том, что модель изменилась.
См. также insertColumns(), removeRows(), beginInsertRows() и endInsertRows().
[virtual] QMap<int, QVariant> QAbstractItemModel::itemData(const QModelIndex &index) const
Возвращает карту со значениями для всех предопределенных ролей в модели для элемента в заданном index.
Переопределите эту функцию, если вы хотите расширить стандартное поведение этой функции, включив пользовательские роли в карту.
См. также setItemData(), Qt::ItemDataRole и data().
[virtual invokable] QModelIndexList QAbstractItemModel::match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const
Возвращает список индексов для элементов в столбце индекса start, где данные, хранящиеся под заданной role, соответствуют указанному value. Способ поиска определяется заданными flags. Возвращаемый список может быть пустым. Обратите также внимание, что порядок результатов в списке может не соответствовать порядку в модели, если, например, используется модель прокси. Порядок результатов нельзя гарантировать.
Поиск начинается с индекса start и продолжается до тех пор, пока количество совпадающих элементов не станет равным hits, поиск не достигнет последней строки или поиск не достигнет start снова — в зависимости от того, задано ли MatchWrap в flags. Если вы хотите найти все совпадающие элементы, используйте hits = -1.
По умолчанию эта функция выполняет сравнение с учетом обертывания и строк для всех элементов, ищет элементы, начинающиеся с поискового термина, указанного value.
Примечание: Реализация по умолчанию этой функции ищет только столбцы. Переопределите эту функцию, чтобы включить другое поведение поиска.
Примечание: Эта функция может вызываться через систему метаобъектов и из QML. См. Q_INVOKABLE.
[virtual] QMimeData *QAbstractItemModel::mimeData(const QModelIndexList &indexes) const
Возвращает объект, содержащий сериализованные элементы данных, соответствующие заданному списку indexes. Формат, используемый для описания закодированных данных, получен из функции mimeTypes(). Эта реализация по умолчанию использует тип MIME по умолчанию, возвращаемый реализацией по умолчанию mimeTypes(). Если вы переопределяете mimeTypes() в своей пользовательской модели, чтобы вернуть больше типов MIME, переопределите эту функцию, чтобы использовать их.
Если список indexes пустой, или нет поддерживаемых типов MIME, вместо сериализованного пустого списка возвращается nullptr.
См. также mimeTypes() и dropMimeData().
[virtual] QStringList QAbstractItemModel::mimeTypes() const
Возвращает список разрешенных типов MIME. По умолчанию встроенные модели и представления используют внутренний тип MIME: application/x-qabstractitemmodeldatalist.
При реализации поддержки перетаскивания в пользовательской модели, если вы будете возвращать данные в форматах, отличных от внутреннего типа MIME по умолчанию, переопределите эту функцию, чтобы вернуть свой список типов MIME.
Если вы повторно реализуете эту функцию в своей пользовательской модели, вы также должны повторно реализовать методы-члены, которые её вызывают: mimeData() и dropMimeData().
См. также mimeData() и dropMimeData().
bool QAbstractItemModel::moveColumn(const QModelIndex &sourceParent, int sourceColumn, const QModelIndex &destinationParent, int destinationChild)
В моделях, поддерживающих эту операцию, перемещает sourceColumn из sourceParent в destinationChild под destinationParent.
Возвращает true если столбцы были успешно перемещены; в противном случае возвращает false.
См. также moveColumns() и moveRow().
[virtual] bool QAbstractItemModel::moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild)
В моделях, поддерживающих эту операцию, перемещает count столбцов, начиная с sourceColumn под родительским элементом sourceParent, в столбец destinationChild под родительским элементом destinationParent.
Возвращает true если столбцы были успешно перемещены; в противном случае возвращает false.
Реализация базового класса ничего не делает и возвращает false.
Если вы реализуете свою собственную модель, вы можете переопределить эту функцию, если хотите поддерживать перемещение. В качестве альтернативы, вы можете предоставить собственный API для изменения данных.
См. также beginMoveColumns() и endMoveColumns().
bool QAbstractItemModel::moveRow(const QModelIndex &sourceParent, int sourceRow, const QModelIndex &destinationParent, int destinationChild)
В моделях, поддерживающих эту операцию, перемещает sourceRow из sourceParent в destinationChild под destinationParent.
Возвращает true если строки были успешно перемещены; в противном случае возвращает false.
См. также moveRows() и moveColumn().
[virtual] bool QAbstractItemModel::moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild)
В моделях, поддерживающих эту операцию, перемещает count строк, начиная с sourceRow под родительским элементом sourceParent, в строку destinationChild под родительским элементом destinationParent.
Возвращает true если строки были успешно перемещены; в противном случае возвращает false.
Реализация базового класса ничего не делает и возвращает false.
Если вы реализуете свою собственную модель, вы можете переопределить эту функцию, если хотите поддерживать перемещение. В качестве альтернативы, вы можете предоставить собственный API для изменения данных.
См. также beginMoveRows() и endMoveRows().
[virtual, since 6.0] void QAbstractItemModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
Заполняет roleDataSpan запрошенными данными для заданного index.
По умолчанию, эта реализация просто вызовет data() для каждого атрибута в диапазоне. Подкласс может переопределить эту функцию для более эффективного предоставления данных представлениям:
void MyModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
{
for (QModelRoleData &roleData : roleDataSpan) {
int role = roleData.role();
// ... obtain the data for index and role ...
roleData.setData(result);
}
} В приведённом фрагменте кода index одинаково для всего вызова. Это означает, что доступ к необходимым структурам данных для извлечения информации для index можно выполнить только один раз (вынести соответствующий код за цикл).
Использование QModelRoleData::setData(), или аналогично QVariant::setValue(), рекомендуется вместо отдельного создания объекта QVariant и присвоения; это потому, что первый метод позволяет повторно использовать память, уже выделенную для объекта QVariant, хранящегося внутри QModelRoleData, в то время как второй всегда выделяет новый объект и затем уничтожает старый.
Обратите внимание, что представления могут вызывать multiData() с диапазонами, которые были использованы в предыдущих вызовах и, следовательно, могут уже содержать некоторые данные. Поэтому крайне важно, что если модель не может вернуть данные для данного атрибута, она должна очистить данные в соответствующем объекте QModelRoleData. Это можно сделать, вызвав QModelRoleData::clearData(), или аналогично, задав сконструированный по умолчанию QVariant и т. д. Невыполнение очистки данных приведет к тому, что представление будет считать, что «старые» данные предназначены для использования для соответствующего атрибута.
Наконец, чтобы избежать дублирования кода, подкласс также может переопределить data() в терминах multiData(), передав диапазон всего из одного элемента:
QVariant MyModel::data(const QModelIndex &index, int role) const
{
QModelRoleData roleData(role);
multiData(index, roleData);
return roleData.data();
} Примечание: Модели не имеют права изменять атрибуты в диапазоне или переупорядочивать элементы диапазона. Это приводит к неопределённому поведению.
Примечание: Передача недействительного индекса модели в эту функцию запрещена.
Эта функция была добавлена в Qt 6.0.
См. также QModelRoleDataSpan и data().
[pure virtual invokable] QModelIndex QAbstractItemModel::parent(const QModelIndex &index) const
Возвращает родительский элемент модели с заданным index. Если у элемента нет родителя, возвращается недействительный QModelIndex.
В моделях, отображающих древовидные структуры данных, часто используется соглашение, что только элементы в первом столбце имеют дочерние элементы. В этом случае при переопределении этой функции в подклассе столбец возвращаемого QModelIndex будет 0.
При переопределении этой функции в подклассе будьте осторожны, чтобы не вызывать методы членов QModelIndex, такие как QModelIndex::parent(), так как индексы, принадлежащие вашей модели, просто вызовут вашу реализацию, что приведёт к бесконечной рекурсии.
Примечание: Эта функция может быть вызвана через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также createIndex().
[protected] QModelIndexList QAbstractItemModel::persistentIndexList() const
Возвращает список индексов, хранящихся как постоянные индексы в модели.
bool QAbstractItemModel::removeColumn(int column, const QModelIndex &parent = QModelIndex())
Удаляет заданный column из дочерних элементов parent.
Возвращает true если столбец удалён; в противном случае возвращает false.
См. также removeColumns(), removeRow(), и insertColumn().
[virtual] bool QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
В моделях, поддерживающих эту операцию, удаляет count столбцов, начиная с column под родительским элементом parent из модели.
Возвращает true если столбцы были успешно удалены; в противном случае возвращает false.
Реализация базового класса ничего не делает и возвращает false.
Если вы реализуете свою собственную модель, вы можете переопределить эту функцию, если хотите поддерживать удаление. В качестве альтернативы, вы можете предоставить собственный API для изменения данных.
См. также removeColumn(), removeRows(), insertColumns(), beginRemoveColumns(), и endRemoveColumns().
bool QAbstractItemModel::removeRow(int row, const QModelIndex &parent = QModelIndex())
Удаляет заданную row из дочерних элементов parent.
Возвращает true если строка удалена; в противном случае возвращает false.
Это функция-обёртка, которая вызывает removeRows(). Реализация QAbstractItemModel функции removeRows() ничего не делает.
См. также removeRows(), removeColumn(), и insertRow().
[virtual] bool QAbstractItemModel::removeRows(int row, int count, const QModelIndex &parent = QModelIndex())
У моделей, поддерживающих эту операцию, удаляет count строк, начиная с указанной строки row, под элементом parent.
Возвращает true если строки были успешно удалены; в противном случае возвращает false.
Реализация базового класса ничего не делает и возвращает false.
Если вы реализуете собственную модель, вы можете переопределить эту функцию, если хотите поддерживать удаление. В качестве альтернативы, вы можете предоставить собственный API для изменения данных.
См. также removeRow(), removeColumns(), insertColumns(), beginRemoveRows() и endRemoveRows().
[virtual] QHash<int, QByteArray> QAbstractItemModel::roleNames() const
Возвращает имена ролей модели.
По умолчанию Qt устанавливает следующие имена ролей:
| Роль Qt | Имя роли QML |
|---|---|
| Qt::DisplayRole | display |
| Qt::DecorationRole | decoration |
| Qt::EditRole | edit |
| Qt::ToolTipRole | toolTip |
| Qt::StatusTipRole | statusTip |
| Qt::WhatsThisRole | whatsThis |
[pure virtual invokable] int QAbstractItemModel::rowCount(const QModelIndex &parent = QModelIndex()) const
Возвращает количество строк под заданным элементом parent. Если элемент parent валиден, то rowCount возвращает количество дочерних элементов родительского элемента.
Примечание: При реализации модели на основе таблицы rowCount() должен возвращать 0, когда элемент parent валиден.
Примечание: К этой функции можно обратиться через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также columnCount().
[virtual invokable] bool QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
Устанавливает данные role для элемента по индексу index со значением value.
Возвращает true при успехе; в противном случае возвращает false.
Сигнал dataChanged() должен быть выпущен, если данные были успешно установлены.
Реализация базового класса возвращает false. Эта функция и data() должны быть переопределены для редактируемых моделей.
Примечание: К этой функции можно обратиться через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также Qt::ItemDataRole, data() и itemData().
[virtual] bool QAbstractItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)
Устанавливает данные для заданной роли role и секции section в заголовке с указанной ориентацией orientation на значение value.
Возвращает true если данные заголовка были обновлены; в противном случае возвращает false.
При переопределении этой функции сигнал headerDataChanged() необходимо явно вызывать.
См. также Qt::ItemDataRole и headerData().
[virtual] bool QAbstractItemModel::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)
Устанавливает данные роли для элемента по индексу index на соответствующее значение в roles для каждой роли Qt::ItemDataRole.
Возвращает true при успехе; в противном случае возвращает false.
Роли, которые не указаны в roles, не будут изменены.
См. также setData(), data() и itemData().
[virtual invokable] QModelIndex QAbstractItemModel::sibling(int row, int column, const QModelIndex &index) const
Возвращает соседний элемент по строке row и столбцу column для элемента по индексу index или невалидный QModelIndex если такого элемента нет.
sibling() — это просто удобная функция, которая находит родителя элемента и использует его для получения индекса дочернего элемента в указанной строке и столбце.
Этот метод можно необязательно переопределить для оптимизации специфичной реализации.
Примечание: К этой функции можно обратиться через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также index(), QModelIndex::row() и QModelIndex::column().
[virtual] void QAbstractItemModel::sort(int column, Qt::SortOrder order = Qt::AscendingOrder)
Сортирует модель по столбцу column в заданном порядке order.
Реализация базового класса ничего не делает.
[virtual] QSize QAbstractItemModel::span(const QModelIndex &index) const
Возвращает размер ячейки (строку и столбец) элемента, представленного index.
Примечание: В настоящее время span не используется.
[virtual] Qt::DropActions QAbstractItemModel::supportedDragActions() const
Возвращает действия перетаскивания, поддерживаемые данными в этой модели.
Реализация по умолчанию возвращает supportedDropActions(). Переопределите эту функцию, если хотите поддерживать дополнительные действия.
supportedDragActions() используется QAbstractItemView::startDrag() в качестве значений по умолчанию, когда происходит перетаскивание.
См. также Qt::DropActions и Использование перетаскивания и выдачи с виджетами элементов.
[virtual] Qt::DropActions QAbstractItemModel::supportedDropActions() const
Возвращает действия выдачи, поддерживаемые этой моделью.
Реализация по умолчанию возвращает Qt::CopyAction. Переопределите эту функцию, если хотите поддерживать дополнительные действия. Также необходимо переопределить функцию dropMimeData() для обработки дополнительных операций.
См. также dropMimeData(), Qt::DropActions и Использование перетаскивания и выдачи с виджетами элементов.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qabstractitemmodel.html