Класс QAbstractItemModel
Класс QAbstractItemModel предоставляет абстрактный интерфейс для классов моделей элементов. Подробнее...
| Заголовок: | #include <QAbstractItemModel> |
| qmake: | QT += core |
| Наследует: | QObject |
| Наследуется от: | QAbstractListModel, QAbstractProxyModel и QAbstractTableModel |
Публичные типы
| Перечисление | CheckIndexOption { НетФлажка, ИндексДействителен, НеИспользоватьРодительский, РодительНеДействителен } |
| Флаги | CheckIndexOptions |
| Перечисление | LayoutChangeHint { НетИзмененияМакет, СортировкаПоВертикали, СортировкаПоГоризонтали } |
Публичные функции
| QAbstractItemModel(QObject *parent = nullptr) | |
| virtual | ~QAbstractItemModel() |
| virtual QModelIndex | buddy(const QModelIndex &index) const |
| virtual bool | canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const |
| virtual bool | canFetchMore(const QModelIndex &parent) const |
| bool | checkIndex(const QModelIndex &index, QAbstractItemModel::CheckIndexOptions options = CheckIndexOption::NoOption) const |
| virtual 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 |
- 32 общедоступных функций, унаследованных от QObject
Общедоступные слоты
| virtual void | revert() |
| virtual bool | submit() |
- 1 общедоступный слот, унаследованный от QObject
Сигналы
| 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 = ...) |
| void | headerDataChanged(Qt::Orientation orientation, int first, int last) |
| void | layoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents = ..., QAbstractItemModel::LayoutChangeHint hint = ...) |
| void | layoutChanged(const QList<QPersistentModelIndex> &parents = ..., QAbstractItemModel::LayoutChangeHint hint = ...) |
| 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) |
- 2 сигнала унаследованы от QObject
Статические публичные члены
| const QMetaObject | staticMetaObject |
- 10 статических публичных членов унаследовано от QObject
Защищённые функции
| 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 |
- 9 защищённых функций унаследовано от QObject
Защищённые слоты
| void | resetInternalData() |
Дополнительные унаследованные члены
- 1 свойство унаследовано от QObject
Подробное описание
Класс QAbstractItemModel предоставляет абстрактный интерфейс для классов моделей элементов.
Класс 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() с подходящими номерами строки и столбца для элемента и идентификатором для него, либо в виде указателя, либо в виде целого значения. Комбинация этих значений должна быть уникальной для каждого элемента. Пользовательские модели обычно используют эти уникальные идентификаторы в других переопределенных функциях для извлечения данных элемента и доступа к информации о родителях и детях элемента. Дополнительную информацию об уникальных идентификаторах см. в Примере простой модели дерева.
Необязательно поддерживать каждую роль, определенную в 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, Использование перетаскивания и падения с элементами представлений, Пример простой модели DOM, Пример простой модели дерева, Пример модели редактируемого дерева и Пример с дополнительной загрузкой.
Документация по типам членов
enum QAbstractItemModel::CheckIndexOptionflags QAbstractItemModel::CheckIndexOptions
Этот перечисление может использоваться для управления проверками, выполняемыми QAbstractItemModel::checkIndex().
| Константа | Значение | Описание |
|---|---|---|
QAbstractItemModel::NoOption |
0x0000 |
Нет параметров проверки указаны. |
QAbstractItemModel::IndexIsValid |
0x0001 |
Индекс модели, переданный QAbstractItemModel::checkIndex(), проверяется на корректность. |
QAbstractItemModel::DoNotUseParent |
0x0002 |
Не выполняет никакой проверки, связанной с использованием родителя индекса, переданного QAbstractItemModel::checkIndex(). |
QAbstractItemModel::ParentIsInvalid |
0x0004 |
Родитель индекса модели, переданного QAbstractItemModel::checkIndex(), проверяется на некорректность. Если оба параметра, этот параметр и DoNotUseParent, указаны, то этот параметр игнорируется. |
Это перечисление было введено или изменено в Qt 5.11.
Тип CheckIndexOptions является псевдонимом для QFlags<CheckIndexOption>. Он хранит логическое ИЛИ сочетание значений CheckIndexOption.
END_OF_DOCUMENT_MARKERenum QAbstractItemModel::LayoutChangeHint
Этот перечисление описывает способ изменения макета модели.
| Постоянная | Значение | Описание |
|---|---|---|
QAbstractItemModel::NoLayoutChangeHint |
0 |
Нет доступных подсказок. |
QAbstractItemModel::VerticalSortHint |
1 |
Строки сортируются. |
QAbstractItemModel::HorizontalSortHint |
2 |
Столбцы сортируются. |
Обратите внимание, что VerticalSortHint и HorizontalSortHint означают, что элементы перемещаются в пределах одного родителя, а не перемещаются в другой родительский элемент в модели, не отфильтровываются и не добавляются.
Документация по функциям-членам
QAbstractItemModel::QAbstractItemModel(QObject *parent = nullptr)
Конструирует абстрактную модель элементов с заданным parent.
[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
{
return 3;
} Примечание: При реализации модели на основе таблицы columnCount() должен возвращать 0, когда родительский элемент допустим.
Примечание: Эта функция может вызываться через механизм метаобъектов и из QML. См. Q_INVOKABLE.
См. также rowCount().
[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().
[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
Возвращает данные, сохраненные под заданным ролем для элемента, на который указывает индекс.
Примечание: Если возвращаемое значение отсутствует, верните некорректное QVariant вместо 0.
Примечание: Данная функция может вызываться через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также Qt::ItemDataRole, setData() и headerData().
[signal] void QAbstractItemModel::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = ...)
Этот сигнал испускается всякий раз, когда данные в существующем элементе изменяются.
Если элементы имеют одного родителя, затронутые элементы находятся между topLeft и bottomRight включительно. Если элементы не имеют одного родителя, поведение не определено.
При переопределении функции setData() этот сигнал необходимо явно испускать.
Необязательный аргумент roles может использоваться для указания ролей данных, которые были фактически изменены. Пустой вектор в аргументе roles означает, что все роли должны рассматриваться как измененные. Порядок элементов в аргументе roles не имеет значения.
См. также headerDataChanged(), setData() и layoutChanged().
[virtual] bool QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
Обрабатывает данные, предоставленные операцией перетаскивания и отпускания, завершившейся заданным действием.
Возвращает 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
Возвращает флаги элемента для данного индекса.
Реализация базового класса возвращает комбинацию флагов, которая позволяет элементу быть активным (ItemIsEnabled) и выбираемым (ItemIsSelectable).
Примечание: Данная функция может вызываться через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также Qt::ItemFlags.
[virtual] bool QAbstractItemModel::hasChildren(const QModelIndex &parent = QModelIndex()) const
Возвращает true если parent имеет потомков; в противном случае возвращает false.
Используйте rowCount() на родителе, чтобы узнать количество потомков.
Обратите внимание, что поведение не определено, если данный индекс возвращает hasChildren с помощью этого метода, если для того же индекса установлен флаг 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
Возвращает данные для заданной роли и раздела в заголовке со заданной ориентацией.
Для горизонтальных заголовков номер раздела соответствует номеру столбца. Аналогично, для вертикальных заголовков номер раздела соответствует номеру строки.
Примечание: Данная функция может вызываться через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также Qt::ItemDataRole, setHeaderData() и QHeaderView.
[signal] void QAbstractItemModel::headerDataChanged(Qt::Orientation orientation, int first, int last)
Этот сигнал излучается всякий раз, когда заголовок изменяется. orientation указывает, изменился ли горизонтальный или вертикальный заголовок. Разделы в заголовке с first по last необходимо обновить.
При переопределении функции setHeaderData() этот сигнал должен быть явно излучен.
Если вы изменяете количество столбцов или строк, вам не нужно излучать этот сигнал, но используйте функции begin/end (см. раздел о подклассах в описании класса QAbstractItemModel для получения подробностей).
См. также headerData(), setHeaderData() и dataChanged().
[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().
[signal] void QAbstractItemModel::layoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents = ..., QAbstractItemModel::LayoutChangeHint hint = ...)
Этот сигнал излучается непосредственно перед изменением макета модели. Компоненты, подключенные к этому сигналу, используют его для адаптации к изменениям в макете модели.
Подклассы должны обновлять любые постоянные индексы модели после излучения layoutAboutToBeChanged().
Необязательный параметр parents используется для более точного уведомления о каких частях макета модели изменяются. Пустой список указывает изменение макета всей модели. Порядок элементов в списке parents не существенен. Необязательный параметр hint используется для указания подсказки о том, что происходит во время переустановки макета модели.
Функция была введена в Qt 5.0.
См. также layoutChanged() и changePersistentIndex().
[signal] void QAbstractItemModel::layoutChanged(const QList<QPersistentModelIndex> &parents = ..., QAbstractItemModel::LayoutChangeHint hint = ...)
Этот сигнал излучается всякий раз, когда макет элементов, представленных моделью, изменился, например, при сортировке модели. При получении этого сигнала представлением необходимо обновить макет элементов, чтобы отразить это изменение.
При наследовании от QAbstractItemModel или QAbstractProxyModel убедитесь, что вы излучаете layoutAboutToBeChanged() перед изменением порядка элементов или структуры данных, которые вы предоставляете представлениям, и излучаете layoutChanged() после изменения макета.
Необязательный параметр parents используется для более точного уведомления о каких частях макета модели изменяются. Пустой список указывает изменение макета всей модели. Порядок элементов в списке parents не существенен. Необязательный параметр hint используется для указания подсказки о том, что происходит во время переустановки макета модели.
Подклассы должны обновить любые постоянные индексы модели перед излучением layoutChanged(). Другими словами, при изменении структуры:
- излучите layoutAboutToBeChanged
- Запомните QModelIndex, который изменится
- Обновите свои внутренние данные
- Вызовите changePersistentIndex()
- излучите layoutChanged
Функция была введена в Qt 5.0.
См. также layoutAboutToBeChanged(), dataChanged(), headerDataChanged(), modelReset() и changePersistentIndex().
END_OF_DOCUMENT_MARKER
[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().
[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().
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().
[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().
[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 |
Эта функция была добавлена в Qt 4.6.
См. также setRoleNames().
[pure virtual] int QAbstractItemModel::rowCount(const QModelIndex &parent = QModelIndex()) const
Возвращает количество строк под данным элементом parent. Если родительский элемент валиден, это означает, что rowCount возвращает количество дочерних элементов родительского элемента.
Примечание: При реализации модели таблицы rowCount() должен возвращать 0, если родительский элемент валиден.
Примечание: К этой функции можно обратиться через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также columnCount().
[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] 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)
Устанавливает данные role для элемента в 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 slot] bool QAbstractItemModel::submit()
Уведомляет модель о необходимости отправки кэшированной информации в постоянное хранилище. Эта функция обычно используется для редактирования строк.
Возвращает true при отсутствии ошибок; в противном случае возвращает false.
См. также revert().
[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.12/qabstractitemmodel.html