Класс 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 { NoOption, IndexIsValid, DoNotUseParent, ParentIsInvalid } |
| Флаги | CheckIndexOptions |
| Перечисление | LayoutChangeHint { NoLayoutChangeHint, VerticalSortHint, HorizontalSortHint } |
Публичные функции
| 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(), проверяется на некорректность. Если заданы оба параметра, то этот параметр игнорируется. |
Это перечисление было введено или изменено в Qt 5.11.
Тип CheckIndexOptions является псевдонимом для QFlags<CheckIndexOption>. Он хранит комбинацию значений CheckIndexOption по принципу «ИЛИ».
перечисление 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] 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] 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] 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] void QAbstractItemModel::fetchMore(const QModelIndex &parent)
Загружает любые доступные данные для элементов с родителем, указанным в индексе родитель.
Переопределите эту функцию, если вы заполняете свою модель постепенно.
Стандартная реализация ничего не делает.
Примечание: К этой функции можно обратиться через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также canFetchMore().
[virtual] Qt::ItemFlags QAbstractItemModel::flags(const QModelIndex &index) const
Возвращает флаги элемента для заданного индекса.
Реализация базового класса возвращает комбинацию флагов, которые активируют элемент (ItemIsEnabled) и позволяют его выделять (ItemIsSelectable).
Примечание: К этой функции можно обратиться через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также Qt::ItemFlags.
[virtual] bool QAbstractItemModel::hasChildren(const QModelIndex &parent = QModelIndex()) const
Возвращает true, если родитель имеет потомков; в противном случае возвращает false.
Используйте rowCount() для родительского элемента, чтобы узнать количество потомков.
Обратите внимание, что поведение при отчётливости о том, что определённый индекс имеет потомков с помощью этого метода, если тому же индексу установлен флаг Qt::ItemNeverHasChildren, не определено.
Примечание: К этой функции можно обратиться через систему метаобъектов и из QML. См. Q_INVOKABLE.
bool QAbstractItemModel::hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const
Возвращает true если модель возвращает допустимый QModelIndex для row и column с parent, в противном случае возвращает false.
Примечание: Данную функцию можно вызвать через систему метаобъектов и из QML. См. Q_INVOKABLE.
[virtual] 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] QModelIndex QAbstractItemModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const
Возвращает индекс элемента в модели, указанного заданными row, column и индексом parent.
При переопределении этой функции в подклассе, используйте 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] 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] 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] int QAbstractItemModel::rowCount(const QModelIndex &parent = QModelIndex()) const
Возвращает количество строк под заданным родителем parent. Если родитель валиден, это означает, что rowCount возвращает количество дочерних элементов родителя.
Примечание: При реализации модели на основе таблицы rowCount() должен возвращать 0, когда родитель валиден.
Примечание: К этой функции можно обратиться через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также columnCount().
[virtual] 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] 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.0/qabstractitemmodel.html