Класс QAbstractItemModel
Класс QAbstractItemModel предоставляет абстрактный интерфейс для классов моделей элементов. Подробнее...
| Заголовок: | #include <QAbstractItemModel> |
| qmake: | QT += core |
| Наследует: | QObject |
| Наследуется от: | QAbstractListModel, QAbstractProxyModel, QAbstractTableModel, QConcatenateTablesProxyModel, QDirModel, QFileSystemModel и QStandardItemModel |
Типы public
| Перечисление | CheckIndexOption { NoOption, IndexIsValid, DoNotUseParent, ParentIsInvalid } |
| Флаги | CheckIndexOptions |
| Перечисление | LayoutChangeHint { NoLayoutChangeHint, VerticalSortHint, HorizontalSortHint } |
Public Функции
| 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 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 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() |
Сигналы
| 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 QVector<int> &roles = QVector<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, 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 |
Защищенные слоты
| void | resetInternalData() |
Подробное описание
Класс QAbstractItemModel определяет стандартный интерфейс, который должны использовать модели элементов для взаимодействия с другими компонентами в архитектуре модель/представление. Он не предназначен для прямого экземплярирования. Вместо этого вы должны наследовать от него, чтобы создать новые модели.
Класс QAbstractItemModel является одним из классов модели/представления и входит в состав фреймворка Qt модель/представление. Он может использоваться в качестве базовой модели данных для элементов представления элементов в QML или классах представления элементов в модуле Qt Widgets.
Если вам нужна модель, которую можно использовать с представлением элементов, таким как элемент List View 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.
Документация типов членов
перечисление 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.
перечисление QAbstractItemModel::LayoutChangeHint
Это перечисление описывает способ изменения макета модели.
| Константа | Значение | Описание |
|---|---|---|
QAbstractItemModel::NoLayoutChangeHint |
0 |
Нет доступных подсказок. |
QAbstractItemModel::VerticalSortHint |
1 |
Строки сортируются. |
QAbstractItemModel::HorizontalSortHint |
2 |
Столбцы сортируются. |
Обратите внимание, что VerticalSortHint и HorizontalSortHint означают, что элементы перемещаются в пределах одного родителя, а не перемещаются в другой родитель в модели, и не отфильтровываются или в неё.
Документация по членам-функциям
QAbstractItemModel::QAbstractItemModel(QObject *parent = nullptr)
Создаёт абстрактную модель элементов с заданным parent.
[signal] void QAbstractItemModel::columnsAboutToBeInserted(const QModelIndex &parent, int first, int last)
Этот сигнал испускается незадолго до вставки столбцов в модель. Новые элементы будут размещены между first и last включительно, под заданным элементом parent.
Примечание: Компоненты, подключённые к этому сигналу, используют его для адаптации к изменениям размеров модели. Его может испускать только реализация QAbstractItemModel, и его нельзя явно испускать в коде подклассов.
Примечание: Это частный сигнал. Его можно использовать в подключениях сигналов, но пользователь не может его испустить.
См. также insertColumns() и beginInsertColumns().
[signal] void QAbstractItemModel::columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn)
Этот сигнал испускается незадолго до перемещения столбцов в модели. Элементы, которые будут перемещены, находятся между sourceStart и sourceEnd включительно, под заданным элементом sourceParent. Они будут перемещены в destinationParent, начиная со столбца destinationColumn.
Примечание: Компоненты, подключённые к этому сигналу, используют его для адаптации к изменениям размеров модели. Его может испускать только реализация QAbstractItemModel, и его нельзя явно испускать в коде подклассов.
Примечание: Это частный сигнал. Его можно использовать в подключениях сигналов, но пользователь не может его испустить.
Эта функция была добавлена в Qt 4.6.
См. также beginMoveRows().
[signal] void QAbstractItemModel::columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last)
Этот сигнал испускается незадолго до удаления столбцов из модели. Удаляемые элементы находятся между first и last включительно, под заданным элементом parent.
Примечание: Компоненты, подключённые к этому сигналу, используют его для адаптации к изменениям размеров модели. Его может испускать только реализация QAbstractItemModel, и его нельзя явно испускать в коде подклассов.
Примечание: Это частный сигнал. Его можно использовать в подключениях сигналов, но пользователь не может его испустить.
См. также removeColumns() и beginRemoveColumns().
[signal] void QAbstractItemModel::columnsInserted(const QModelIndex &parent, int first, int last)
Этот сигнал испускается после вставки столбцов в модель. Новые элементы находятся между first и last включительно, под заданным элементом parent.
Примечание: Компоненты, подключённые к этому сигналу, используют его для адаптации к изменениям размеров модели. Его может испускать только реализация QAbstractItemModel, и его нельзя явно испускать в коде подклассов.
Примечание: Это частный сигнал. Его можно использовать в подключениях сигналов, но пользователь не может его испустить.
См. также insertColumns() и beginInsertColumns().
[signal] void QAbstractItemModel::columnsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int column)
Этот сигнал испускается после перемещения столбцов в модели. Элементы между start и end включительно, под заданным элементом parent, были перемещены в destination, начиная со столбца column.
Примечание: Компоненты, подключённые к этому сигналу, используют его для адаптации к изменениям размеров модели. Его может испускать только реализация QAbstractItemModel, и его нельзя явно испускать в коде подклассов.
Примечание: Это частный сигнал. Его можно использовать в подключениях сигналов, но пользователь не может его испустить.
Эта функция была добавлена в Qt 4.6.
См. также beginMoveRows().
[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 QVector<int> &roles = QVector<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] void QAbstractItemModel::layoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint)
Этот сигнал испускается незадолго до изменения макета модели. Компоненты, подключённые к этому сигналу, используют его для адаптации к изменениям макета модели.
Подклассы должны обновлять любые постоянные индексы модели после испускания layoutAboutToBeChanged().
Необязательный параметр parents используется для более точного уведомления о том, какие части макета модели изменяются. Пустой список указывает на изменение макета всей модели. Порядок элементов в списке parents несущественен. Необязательный параметр hint используется для указания информации о том, что происходит во время изменения макета модели.
Эта функция была добавлена в Qt 5.0.
См. также layoutChanged() и changePersistentIndex().
[signal] 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().
[signal] void QAbstractItemModel::modelAboutToBeReset()
Этот сигнал излучается при вызове beginResetModel(), перед тем как внутреннее состояние модели (например, постоянные индексы модели) будет аннулировано.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.
Эта функция была добавлена в Qt 4.2.
См. также beginResetModel() и modelReset().
[signal] void QAbstractItemModel::modelReset()
Этот сигнал излучается при вызове endResetModel(), после того как внутреннее состояние модели (например, постоянные индексы модели) будет аннулировано.
Обратите внимание, что если модель сброшена, вся информация, ранее полученная из неё, считается недействительной. Это включает, но не ограничивается, rowCount() и columnCount(), flags(), данными, полученными через data(), и roleNames().
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.
Эта функция была добавлена в Qt 4.1.
См. также endResetModel() и modelAboutToBeReset().
[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.
Эта функция была добавлена в Qt 4.8.
См. также modelAboutToBeReset() и modelReset().
[virtual slot] void QAbstractItemModel::revert()
Уведомляет модель о том, что она должна отбросить кэшированную информацию. Эта функция обычно используется при редактировании строк.
См. также submit().
[signal] void QAbstractItemModel::rowsAboutToBeInserted(const QModelIndex &parent, int start, int end)
Этот сигнал излучается перед вставкой строк в модель. Новые элементы будут размещены между start и end включительно, под заданным элементом parent.
Примечание: Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям в размерах модели. Он может излучаться только реализацией QAbstractItemModel, и не может быть явно излучен в коде подкласса.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.
См. также insertRows() и beginInsertRows().
[signal] void QAbstractItemModel::rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow)
Этот сигнал излучается перед перемещением строк внутри модели. Элементы, которые будут перемещены, находятся между sourceStart и sourceEnd включительно, под заданным элементом sourceParent. Они будут перемещены в destinationParent, начиная с строки destinationRow.
Примечание: Компоненты, подключённые к этому сигналу, используют его для адаптации к изменениям размеров модели. Он может излучаться только реализацией QAbstractItemModel, и не может быть явно излучен в коде подкласса.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.
Эта функция была добавлена в Qt 4.6.
См. также beginMoveRows().
[signal] void QAbstractItemModel::rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last)
Этот сигнал излучается перед удалением строк из модели. Элементы, которые будут удалены, находятся между first и last включительно, под заданным элементом parent.
Примечание: Компоненты, подключённые к этому сигналу, используют его для адаптации к изменениям размеров модели. Он может излучаться только реализацией QAbstractItemModel, и не может быть явно излучен в коде подкласса.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.
См. также removeRows() и beginRemoveRows().
[signal] void QAbstractItemModel::rowsInserted(const QModelIndex &parent, int first, int last)
Этот сигнал излучается после вставки строк в модель. Новые элементы находятся между first и last включительно, под заданным элементом parent.
Примечание: Компоненты, подключённые к этому сигналу, используют его для адаптации к изменениям в размерах модели. Он может излучаться только реализацией QAbstractItemModel, и не может быть явно излучен в коде подкласса.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.
См. также insertRows() и beginInsertRows().
[signal] void QAbstractItemModel::rowsMoved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row)
Этот сигнал излучается после перемещения строк внутри модели. Элементы между start и end включительно, под заданным элементом parent, были перемещены в destination, начиная с строки row.
Примечание: Компоненты, подключённые к этому сигналу, используют его для адаптации к изменениям размеров модели. Он может излучаться только реализацией QAbstractItemModel, и не может быть явно излучен в коде подкласса.
Примечание: Это частный сигнал. Он может использоваться в соединениях сигналов, но не может излучаться пользователем.
Эта функция была добавлена в Qt 4.6.
См. также beginMoveRows().
[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, если какое-либо из этих условий выполняется, в этом случае вы должны прервать операцию перемещения.
Функция была добавлена в Qt 4.6.
См. также 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); Обратите внимание, что другие строки могут сместиться соответственно. |
Функция была добавлена в Qt 4.6.
См. также 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().
Эта функция была введена в Qt 4.6.
См. также 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. Эта реализация по умолчанию проверяет только, содержит ли 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, ничего не изменяется.
Эта функция была введена в Qt 4.1.
См. также persistentIndexList() и changePersistentIndex().
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.
[pure virtual] int QAbstractItemModel::columnCount(const QModelIndex &parent = QModelIndex()) const
Возвращает количество столбцов для потомков заданного parent.
В большинстве подклассов количество столбцов не зависит от parent.
Например:
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, void *ptr = nullptr) const
Создаёт индекс модели для заданного row и column с внутренним указателем ptr.
При использовании QSortFilterProxyModel, его индексы имеют свой внутренний указатель. Не рекомендуется обращаться к этому внутреннему указателю вне модели. Используйте функцию data() вместо этого.
Эта функция предоставляет согласованный интерфейс, который подклассы модели должны использовать для создания индексов модели.
[protected] QModelIndex QAbstractItemModel::createIndex(int row, int column, quintptr id) const
Создаёт индекс модели для заданного row и column с внутренним идентификатором id.
Эта функция предоставляет согласованный интерфейс, который подклассы модели должны использовать для создания индексов модели.
См. также QModelIndex::internalId().
[pure virtual] QVariant QAbstractItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const
Возвращает данные, хранящиеся под заданным role для элемента, на который ссылается index.
Примечание: Если вам нечего возвращать, верните недействительный 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)
Обрабатывает data, предоставленные операцией перетаскивания и размещения, завершившейся заданным action.
Возвращает true если данные и действие были обработаны моделью; в противном случае возвращает false.
Указанные row, column и parent указывают на расположение элемента в модели, где завершилась операция. Модель должна завершить действие в нужном месте.
Например, действие размещения над элементом в QTreeView может привести к вставке новых элементов либо как потомков элемента, указанного row, column и parent, либо как братьев/сестёр элемента.
Если row и column равны -1, это означает, что перетаскиваемые данные должны рассматриваться как размещённые непосредственно на parent. Обычно это означает добавление данных в качестве дочерних элементов parent. Если row и column больше или равны нулю, это означает, что размещение произошло непосредственно перед указанным row и column в указанном parent.
Член mimeTypes() вызывается для получения списка допустимых типов MIME. Эта реализация по умолчанию предполагает реализацию по умолчанию mimeTypes(), которая возвращает единственный тип MIME по умолчанию. Если вы переопределяете mimeTypes() в своей пользовательской модели для возврата нескольких типов MIME, вы должны переопределить и эту функцию, чтобы использовать их.
См. также supportedDropActions(), canDropMimeData() и Использование перетаскивания и размещения с представлениями элементов.
[protected] void QAbstractItemModel::endInsertColumns()
Завершает операцию вставки столбцов.
При переопределении insertColumns() в подклассе, вы должны вызвать эту функцию после вставки данных в базу данных модели.
См. также beginInsertColumns().
[protected] void QAbstractItemModel::endInsertRows()
Завершает операцию вставки строк.
При переопределении insertRows() в подклассе, вы должны вызвать эту функцию после вставки данных в базу данных модели.
См. также beginInsertRows().
[protected] void QAbstractItemModel::endMoveColumns()
Завершает операцию перемещения столбцов.
При реализации подкласса вы должны вызвать эту функцию после перемещения данных в базе данных модели.
Эта функция была добавлена в Qt 4.6.
См. также beginMoveColumns().
[protected] void QAbstractItemModel::endMoveRows()
Завершает операцию перемещения строк.
При реализации подкласса вы должны вызвать эту функцию после перемещения данных в базе данных модели.
Эта функция была добавлена в Qt 4.6.
См. также beginMoveRows().
[protected] void QAbstractItemModel::endRemoveColumns()
Завершает операцию удаления столбцов.
При переопределении removeColumns() в подклассе, вы должны вызвать эту функцию после удаления данных из базы данных модели.
См. также beginRemoveColumns().
[protected] void QAbstractItemModel::endRemoveRows()
Завершает операцию удаления строк.
При переопределении removeRows() в подклассе, вы должны вызвать эту функцию после удаления данных из базы данных модели.
См. также beginRemoveRows().
[protected] void QAbstractItemModel::endResetModel()
Завершает операцию сброса модели.
Вы должны вызвать эту функцию после сброса любой внутренней структуры данных в вашей модели или модели-прокси.
Эта функция излучает сигнал modelReset().
Эта функция была добавлена в Qt 4.6.
См. также beginResetModel().
[virtual] void QAbstractItemModel::fetchMore(const QModelIndex &parent)
Загружает все доступные данные для элементов с родительским элементом, указанным индексом parent.
Переопределите эту функцию, если вы заполняете модель по частям.
Реализация по умолчанию ничего не делает.
Примечание: Эта функция может быть вызвана через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также canFetchMore().
[virtual] Qt::ItemFlags QAbstractItemModel::flags(const QModelIndex &index) const
Возвращает флаги элемента для заданного index.
Реализация базового класса возвращает комбинацию флагов, которая включает элемент (ItemIsEnabled) и позволяет его выбирать (ItemIsSelectable).
Примечание: Эта функция может быть вызвана через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также Qt::ItemFlags.
[virtual] bool QAbstractItemModel::hasChildren(const QModelIndex &parent = QModelIndex()) const
Возвращает true если parent имеет потомков; в противном случае возвращает 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 нет, возвращается 0 вместо сериализованного пустого списка.
См. также 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().
[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
Возвращает список индексов, хранящихся в модели в качестве постоянных индексов.
Эта функция была введена в Qt 4.2.
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 Role | Имя роли QML |
|---|---|
| Qt::DisplayRole | display |
| Qt::DecorationRole | decoration |
| Qt::EditRole | edit |
| Qt::ToolTipRole | toolTip |
| Qt::StatusTipRole | statusTip |
| Qt::WhatsThisRole | whatsThis |
Эта функция была введена в Qt 4.6.
См. также setRoleNames().
[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() — это просто вспомогательная функция, которая находит родительский элемент и использует его для получения индекса дочернего элемента в указанном row и column.
Этот метод может быть необязательно переопределен для реализации оптимизаций.
Примечание: Эту функцию можно вызывать через метаобъектную систему и из 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() в качестве значений по умолчанию при выполнении перетаскивания.
См. также setSupportedDragActions(), Qt::DropActions и Использование перетаскивания и сбрасывания с элементами виджетов.
[virtual] Qt::DropActions QAbstractItemModel::supportedDropActions() const
Возвращает действия выгрузки, поддерживаемые этой моделью.
Реализация по умолчанию возвращает Qt::CopyAction. Переопределите эту функцию, если хотите добавить дополнительные действия. Также необходимо переопределить функцию dropMimeData() для обработки дополнительных операций.
Эта функция была добавлена в Qt 4.2.
См. также dropMimeData(), Qt::DropActions и Использование перетаскивания и сбрасывания с элементами виджетов.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qabstractitemmodel.html