Класс 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 public functions inherited from QObject
Public Slots
| virtual void | revert() |
| virtual bool | submit() |
- 1 public slot inherited from QObject
Сигналы
| void | колонкиОжидаютВставки(const QModelIndex &parent, int first, int last) |
| void | колонкиОжидаютПеремещения(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn) |
| void | колонкиОжидаютУдаления(const QModelIndex &parent, int first, int last) |
| void | колонкиВставлены(const QModelIndex &parent, int first, int last) |
| void | колонкиПеремещены(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int column) |
| void | колонкиУдалены(const QModelIndex &parent, int first, int last) |
| void | данныеИзменились(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = ...) |
| void | изменилисьДанныеЗаголовка(Qt::Orientation orientation, int first, int last) |
| void | макетОжидаетИзменения(const QList<QPersistentModelIndex> &parents = ..., QAbstractItemModel::LayoutChangeHint hint = ...) |
| void | макетИзменен(const QList<QPersistentModelIndex> &parents = ..., QAbstractItemModel::LayoutChangeHint hint = ...) |
| void | модельОжидаетСброса() |
| void | модельСброшена() |
| void | строкиОжидаютВставки(const QModelIndex &parent, int start, int end) |
| void | строкиОжидаютПеремещения(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow) |
| void | строкиОжидаютУдаления(const QModelIndex &parent, int first, int last) |
| void | строкиВставлены(const QModelIndex &parent, int first, int last) |
| void | строкиПеремещены(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row) |
| void | строкиУдалены(const QModelIndex &parent, int first, int last) |
- 2 сигнала унаследованы от QObject
Защищенные функции
| void | началоВставкиКолонок(const QModelIndex &parent, int first, int last) |
| void | началоВставкиСтрок(const QModelIndex &parent, int first, int last) |
| bool | началоПеремещенияКолонок(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild) |
| bool | началоПеремещенияСтрок(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild) |
| void | началоУдаленияКолонок(const QModelIndex &parent, int first, int last) |
| void | началоУдаленияСтрок(const QModelIndex &parent, int first, int last) |
| void | началоСбросаМодели() |
| void | изменитьПостоянныйИндекс(const QModelIndex &from, const QModelIndex &to) |
| void | изменитьСписокПостоянныхИндексов(const QModelIndexList &from, const QModelIndexList &to) |
| QModelIndex | создатьИндекс(int row, int column, void *ptr = nullptr) const |
| QModelIndex | создатьИндекс(int row, int column, quintptr id) const |
| void | конецВставкиКолонок() |
| void | конецВставкиСтрок() |
| void | конецПеремещенияКолонок() |
| void | конецПеремещенияСтрок() |
| void | конецУдаленияКолонок() |
| void | конецУдаленияСтрок() |
| void | конецСбросаМодели() |
| QModelIndexList | списокПостоянныхИндексов() const |
- 9 защищенных функций унаследованы от QObject
Защищенные слоты
| void | сброситьВнутренниеДанные() |
Дополнительные унаследованные члены
Подробное описание
Класс 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() с подходящими номерами строк и столбцов для элемента и идентификатором для него, либо в виде указателя, либо в виде целочисленного значения. Комбинация этих значений должна быть уникальной для каждого элемента. Пользовательские модели обычно используют эти уникальные идентификаторы в других переопределённых функциях для получения данных элемента и доступа к информации о родителях и дочерних элементах. Дополнительную информацию об уникальных идентификаторах см. в примере 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.
Документация по типам членов
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(), проверяется на недействительность. Если указаны обе опции, эта опция игнорируется. |
Это перечисление было введено или изменено в Qt 5.11.
Тип CheckIndexOptions является типом-синонимом для QFlags<CheckIndexOption>. Он хранит логическое ИЛИ сочетание значений CheckIndexOption.
enum 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)
Обрабатывает данные, предоставленные операцией перетаскивания и падения, которая завершилась указанным действием 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
Возвращает флаги элемента для данного индекса.
Реализация базового класса возвращает комбинацию флагов, которые позволяют использовать элемент (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
Возвращает данные для заданной роли и раздела в заголовке с указанной ориентацией.
Для горизонтальных заголовков номер раздела соответствует номеру столбца. Аналогично, для вертикальных заголовков номер раздела соответствует номеру строки.
Примечание: Эту функцию можно вызвать через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также Qt::ItemDataRole, setHeaderData() и QHeaderView.
[signal] void QAbstractItemModel::headerDataChanged(Qt::Orientation orientation, int first, int last)
Этот сигнал испускается всякий раз, когда заголовок изменяется. Направление указывает, был изменён горизонтальный или вертикальный заголовок. Разделы в заголовке от первого до последнего необходимо обновить.
При повторной реализации функции setHeaderData() этот сигнал необходимо явно испустить.
Если вы изменяете количество столбцов или строк, вам не нужно испускать этот сигнал, но используйте функции begin/end (см. раздел по наследованию в описании класса QAbstractItemModel для получения подробностей).
См. также headerData(), setHeaderData() и dataChanged().
[pure virtual] QModelIndex QAbstractItemModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const
Возвращает индекс элемента в модели, указанный заданным строкой, столбцом и индексом родителя.
При повторной реализации этой функции в подклассе вызовите createIndex(), чтобы сгенерировать индексы модели, которые другие компоненты могут использовать для ссылки на элементы в вашей модели.
Примечание: Эта функция может вызываться через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также createIndex().
bool QAbstractItemModel::insertColumn(int column, const QModelIndex &parent = QModelIndex())
Вставляет один столбец перед заданным столбцом в дочерних элементах указанного родителя.
Возвращает true если столбец вставлен; в противном случае возвращает false.
См. также insertColumns(), insertRow() и removeColumn().
[virtual] bool QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
В моделях, поддерживающих это, вставляет count новых столбцов в модель перед заданным столбцом. Элементы в каждом новом столбце будут дочерними элементами элемента, представленного индексом модели parent.
Если column равно 0, столбцы добавляются в начало существующих столбцов.
Если column равно columnCount(), столбцы добавляются в конец существующих столбцов.
Если у parent нет дочерних элементов, вставляется одна строка с count столбцами.
Возвращает true если столбцы успешно вставлены; в противном случае возвращает false.
Реализация базового класса ничего не делает и возвращает false.
Если вы реализуете свою собственную модель, вы можете переопределить эту функцию, если хотите поддерживать вставки. В качестве альтернативы вы можете предоставить собственный API для изменения данных.
См. также insertRows(), removeColumns(), beginInsertColumns() и endInsertColumns().
bool QAbstractItemModel::insertRow(int row, const QModelIndex &parent = QModelIndex())
Вставляет одну строку перед заданной строкой в дочерних элементах указанного родителя.
Примечание: Эта функция вызывает виртуальный метод insertRows.
Возвращает true если строка вставлена; в противном случае возвращает false.
См. также insertRows(), insertColumn() и removeRow().
[virtual] bool QAbstractItemModel::insertRows(int row, int count, const QModelIndex &parent = QModelIndex())
Примечание: Реализация базового класса этой функции ничего не делает и возвращает false.
В моделях, поддерживающих это, вставляет count строк в модель перед заданной строкой. Элементы в новой строке будут дочерними элементами элемента, представленного индексом модели 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
Возвращает карту с значениями для всех предопределённых ролей в модели для элемента по заданному индексу.
Переопределите эту функцию, если хотите расширить стандартное поведение этой функции, включив в карту пользовательские роли.
См. также 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().
[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)
Устанавливает данные роли для элемента в index на соответствующее значение в roles для каждой Qt::ItemDataRole.
Возвращает true при успехе; в противном случае возвращает false.
Роли, отсутствующие в roles, не будут изменены.
См. также setData(), data() и itemData().
[virtual] QModelIndex QAbstractItemModel::sibling(int row, int column, const QModelIndex &index) const
Возвращает элемент-двойник в строке row и столбце column для элемента в index, или недействительный QModelIndex, если такого элемента-двойника нет.
sibling() — это просто вспомогательная функция, которая находит родителя элемента и использует его для получения индекса дочернего элемента в указанной строке и столбце.
Этот метод может быть переопределен для оптимизации реализации.
Примечание: Эта функция может быть вызвана через систему метаобъектов и из QML. См. Q_INVOKABLE.
См. также index(), QModelIndex::row() и QModelIndex::column().
[virtual] void QAbstractItemModel::sort(int column, Qt::SortOrder order = Qt::AscendingOrder)
Сортирует модель по column в заданном order.
Реализация базового класса ничего не делает.
[virtual] QSize QAbstractItemModel::span(const QModelIndex &index) const
Возвращает размер строки и столбца элемента, представленного index.
Примечание: В настоящее время span не используется.
[virtual 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/archives/qt-5.11/qabstractitemmodel.html