Класс QStandardItemModel
Класс QStandardItemModel предоставляет общий модель для хранения пользовательских данных. Подробнее...
| Заголовок: | #include <QStandardItemModel> |
| CMake: | find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| Наследуется от: | QAbstractItemModel |
Свойства
- sortRole : int
Общедоступные функции
| QStandardItemModel(int rows, int columns, QObject *parent = nullptr) | |
| QStandardItemModel(QObject *parent = nullptr) | |
| virtual | ~QStandardItemModel() |
| void | appendColumn(const QList<QStandardItem *> &items) |
| void | appendRow(const QList<QStandardItem *> &items) |
| void | appendRow(QStandardItem *item) |
| void | очистить() |
| QList<QStandardItem *> | findItems(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly, int column = 0) const |
| QStandardItem * | horizontalHeaderItem(int column) const |
| QModelIndex | indexFromItem(const QStandardItem *item) const |
| void | insertColumn(int column, const QList<QStandardItem *> &items) |
| bool | insertColumn(int column, const QModelIndex &parent = QModelIndex()) |
| void | insertRow(int row, const QList<QStandardItem *> &items) |
| void | insertRow(int row, QStandardItem *item) |
| bool | insertRow(int row, const QModelIndex &parent = QModelIndex()) |
| QStandardItem * | invisibleRootItem() const |
| QStandardItem * | item(int row, int column = 0) const |
| QStandardItem * | itemFromIndex(const QModelIndex &index) const |
| const QStandardItem * | itemPrototype() const |
| void | setColumnCount(int columns) |
| void | setHorizontalHeaderItem(int column, QStandardItem *item) |
| void | setHorizontalHeaderLabels(const QStringList &labels) |
| void | setItem(int row, int column, QStandardItem *item) |
| void | setItem(int row, QStandardItem *item) |
| void | setItemPrototype(const QStandardItem *item) |
| void | setItemRoleNames(const QHash<int, QByteArray> &roleNames) |
| void | setRowCount(int rows) |
| void | установитьРольСортировки(int role) |
| void | setVerticalHeaderItem(int row, QStandardItem *item) |
| void | setVerticalHeaderLabels(const QStringList &labels) |
| int | sortRole() const |
| QList<QStandardItem *> | takeColumn(int column) |
| QStandardItem * | takeHorizontalHeaderItem(int column) |
| QStandardItem * | takeItem(int row, int column = 0) |
| QList<QStandardItem *> | takeRow(int row) |
| QStandardItem * | takeVerticalHeaderItem(int row) |
| QStandardItem * | verticalHeaderItem(int row) const |
Реализованные общедоступные функции
| виртуальный bool | clearItemData(const QModelIndex &index) override |
| виртуальный int | columnCount(const QModelIndex &parent = QModelIndex()) const override |
| виртуальный QVariant | data(const QModelIndex &index, int role = Qt::DisplayRole) const override |
| виртуальный bool | dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override |
| виртуальный Qt::ItemFlags | flags(const QModelIndex &index) const override |
| виртуальный bool | hasChildren(const QModelIndex &parent = QModelIndex()) const override |
| виртуальный QVariant | headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override |
| виртуальный QModelIndex | index(int row, int column, const QModelIndex &parent = QModelIndex()) const override |
| виртуальный bool | insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override |
| виртуальный bool | insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override |
| виртуальный QMap<int, QVariant> | itemData(const QModelIndex &index) const override |
| виртуальный QMimeData * | mimeData(const QModelIndexList &indexes) const override |
| виртуальный QStringList | mimeTypes() const override |
| виртуальный void | multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const override |
| виртуальный QModelIndex | parent(const QModelIndex &child) const override |
| виртуальный bool | removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override |
| виртуальный bool | removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override |
| виртуальный QHash<int, QByteArray> | roleNames() const override |
| виртуальный int | rowCount(const QModelIndex &parent = QModelIndex()) const override |
| виртуальный bool | setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override |
| виртуальный bool | setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override |
| виртуальный bool | setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) override |
| виртуальный void | sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override |
| виртуальный Qt::DropActions | supportedDropActions() const override |
Сигналы
| void | itemChanged(QStandardItem *item) |
Подробное описание
QStandardItemModel может использоваться в качестве хранилища стандартных типов данных Qt. Это один из классов Модель/Представление и входит в фреймворк Qt модель/представление.
QStandardItemModel предоставляет классический подход на основе элементов для работы с моделью. Элементы в QStandardItemModel предоставляются QStandardItem.
QStandardItemModel реализует интерфейс QAbstractItemModel, что означает, что модель может использоваться для предоставления данных в любом представлении, поддерживающем этот интерфейс (например, QListView, QTableView и QTreeView, и ваши собственные пользовательские представления). Для повышения производительности и гибкости вы можете наследовать от QAbstractItemModel, чтобы предоставить поддержку для различных типов хранилищ данных. Например, QFileSystemModel предоставляет интерфейс модели к подлежащей файловой системе.
Когда вам нужен список или дерево, вы обычно создаете пустой QStandardItemModel и используете appendRow(), чтобы добавить элементы в модель, и item(), чтобы получить доступ к элементу. Если ваша модель представляет собой таблицу, вы обычно передаете размеры таблицы в конструктор QStandardItemModel и используете setItem(), чтобы разместить элементы в таблице. Вы также можете использовать setRowCount() и setColumnCount(), чтобы изменить размеры модели. Чтобы вставить элементы, используйте insertRow() или insertColumn(), а чтобы удалить элементы, используйте removeRow() или removeColumn().
Вы можете задать метки заголовков вашей модели с помощью setHorizontalHeaderLabels() и setVerticalHeaderLabels().
Вы можете искать элементы в модели с помощью findItems(), и сортировать модель, вызвав sort().
Вызовите clear(), чтобы удалить все элементы из модели.
Пример использования QStandardItemModel для создания таблицы:
QStandardItemModel model(4, 4);
for (int row = 0; row < model.rowCount(); ++row) {
for (int column = 0; column < model.columnCount(); ++column) {
QStandardItem *item = new QStandardItem(QString("row %0, column %1").arg(row).arg(column));
model.setItem(row, column, item);
}
} Пример использования QStandardItemModel для создания дерева:
QStandardItemModel model;
QStandardItem *parentItem = model.invisibleRootItem();
for (int i = 0; i < 4; ++i) {
QStandardItem *item = new QStandardItem(QString("item %0").arg(i));
parentItem->appendRow(item);
parentItem = item;
} После установки модели на представлении вы обычно хотите отреагировать на действия пользователя, такие как щелчок по элементу. Поскольку QAbstractItemView предоставляет сигналы и функции на основе QModelIndex, вам нужен способ получить QStandardItem, соответствующий заданному QModelIndex, и наоборот. itemFromIndex() и indexFromItem() предоставляют это отображение. Типичное использование itemFromIndex() включает получение элемента в текущем индексе в представлении и получение элемента, соответствующего индексу, переданному сигналом QAbstractItemView, например QAbstractItemView::clicked(). Сначала подключите сигнал представления к слоту в вашем классе:
QTreeView *treeView = new QTreeView(this);
treeView->setModel(myStandardItemModel);
connect(treeView, &QTreeView::clicked,
this, &MyWidget::clicked); При получении сигнала вызывайте itemFromIndex() для заданного индекса модели, чтобы получить указатель на элемент:
void MyWidget::clicked(const QModelIndex &index)
{
QStandardItem *item = myStandardItemModel->itemFromIndex(index);
// Do stuff with the item ...
} Обратно, вам необходимо получить QModelIndex элемента, когда вы хотите вызвать функцию модели/представления, которая принимает индекс в качестве аргумента. Вы можете получить индекс, используя функцию indexFromItem() модели или, что эквивалентно, вызвав QStandardItem::index():
treeView->scrollTo(item->index());
Конечно, вы не обязаны использовать подход на основе элементов; вы можете вместо этого полностью полагаться на интерфейс QAbstractItemModel при работе с моделью или использовать их комбинацию по мере необходимости.
См. также QStandardItem, Модель/Представление, QAbstractItemModel, Пример простой модели дерева и Классы удобства представления элементов.
END_OF_DOCUMENT_MARKERДокументация свойств
sortRole : int
Это свойство содержит роль элемента, используемую для запроса данных модели при сортировке элементов.
Значение по умолчанию — Qt::DisplayRole.
Функции доступа:
| int | sortRole() const |
| void | setSortRole(int role) |
См. также sort() и QStandardItem::sortChildren().
Документация функций-членов
QStandardItemModel::QStandardItemModel(int rows, int columns, QObject *parent = nullptr)
Создаёт новую модель элементов, которая изначально содержит rows строк и columns столбцов и имеет указанный parent.
QStandardItemModel::QStandardItemModel(QObject *parent = nullptr)
Создаёт новую модель элементов с заданным parent.
[signal] void QStandardItemModel::itemChanged(QStandardItem *item)
Этот сигнал испускается всякий раз, когда данные элемента item изменяются.
[virtual] QStandardItemModel::~QStandardItemModel()
Удаляет модель. Модель уничтожает все свои элементы.
void QStandardItemModel::appendColumn(const QList<QStandardItem *> &items)
Добавляет столбец, содержащий элементы items. При необходимости количество строк увеличивается до размера items.
См. также insertColumn() и appendRow().
void QStandardItemModel::appendRow(const QList<QStandardItem *> &items)
Добавляет строку, содержащую элементы items. При необходимости количество столбцов увеличивается до размера items.
См. также insertRow() и appendColumn().
void QStandardItemModel::appendRow(QStandardItem *item)
Это перегруженная функция.
При построении списка или дерева, имеющего только один столбец, эта функция предоставляет удобный способ добавления одного нового элемента item.
void QStandardItemModel::clear()
Удаляет все элементы (включая заголовки) из модели и устанавливает количество строк и столбцов в ноль.
См. также removeColumns() и removeRows().
[override virtual] bool QStandardItemModel::clearItemData(const QModelIndex &index)
Переопределяет: QAbstractItemModel::clearItemData(const QModelIndex &index).
[override virtual] int QStandardItemModel::columnCount(const QModelIndex &parent = QModelIndex()) const
Переопределяет: QAbstractItemModel::columnCount(const QModelIndex &parent) const.
См. также setColumnCount().
[override virtual] QVariant QStandardItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const
Переопределяет: QAbstractItemModel::data(const QModelIndex &index, int role) const.
См. также setData().
[override virtual] bool QStandardItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
Переопределяет: QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent).
QList<QStandardItem *> QStandardItemModel::findItems(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly, int column = 0) const
Возвращает список элементов, которые соответствуют заданному text, используя заданные flags, в заданном column.
[override virtual] Qt::ItemFlags QStandardItemModel::flags(const QModelIndex &index) const
Переопределяет: QAbstractItemModel::flags(const QModelIndex &index) const.
[override virtual] bool QStandardItemModel::hasChildren(const QModelIndex &parent = QModelIndex()) const
Переопределяет: QAbstractItemModel::hasChildren(const QModelIndex &parent) const.
[override virtual] QVariant QStandardItemModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
Переопределяет: QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role) const.
См. также setHeaderData().
QStandardItem *QStandardItemModel::horizontalHeaderItem(int column) const
Возвращает элемент заголовка по горизонтали для column, если он был задан; в противном случае возвращает nullptr.
См. также setHorizontalHeaderItem() и verticalHeaderItem().
[override virtual] QModelIndex QStandardItemModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const
Переопределяет: QAbstractItemModel::index(int row, int column, const QModelIndex &parent) const.
QModelIndex QStandardItemModel::indexFromItem(const QStandardItem *item) const
Возвращает QModelIndex, связанный с заданным item.
Используйте эту функцию, когда хотите выполнить операцию, которая требует QModelIndex элемента, например, QAbstractItemView::scrollTo(). QStandardItem::index() предоставлена для удобства; она эквивалентна вызову этой функции.
См. также itemFromIndex() и QStandardItem::index().
void QStandardItemModel::insertColumn(int column, const QList<QStandardItem *> &items)
Вставляет столбец в позицию column, содержащий элементы items. При необходимости количество строк увеличивается до размера items.
См. также takeColumn(), appendColumn(), и insertRow().
bool QStandardItemModel::insertColumn(int column, const QModelIndex &parent = QModelIndex())
Вставляет один столбец перед заданным column в дочерние элементы заданного parent. Возвращает true если столбец был вставлен; в противном случае возвращает false.
См. также insertColumns(), insertRow(), и removeColumn().
[override virtual] bool QStandardItemModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
Переопределяет: QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent).
END_OF_DOCUMENT_MARKERvoid QStandardItemModel::insertRow(int row, const QList<QStandardItem *> &items)
Вставляет строку по индексу row, содержащую элементы items. При необходимости, количество столбцов увеличивается до размера items.
См. также takeRow(), appendRow() и insertColumn().
void QStandardItemModel::insertRow(int row, QStandardItem *item)
Это перегруженный метод.
Вставляет строку по индексу row, содержащую элемент item.
При построении списка или дерева, имеющего только один столбец, этот метод предоставляет удобный способ добавления одного нового элемента.
bool QStandardItemModel::insertRow(int row, const QModelIndex &parent = QModelIndex())
Вставляет отдельную строку перед заданной строкой row в дочерних элементах родительского элемента parent. Возвращает true, если строка вставлена; в противном случае возвращает false.
См. также insertRows(), insertColumn() и removeRow().
[override virtual] bool QStandardItemModel::insertRows(int row, int count, const QModelIndex &parent = QModelIndex())
Реализует: QAbstractItemModel::insertRows(int row, int count, const QModelIndex &parent).
QStandardItem *QStandardItemModel::invisibleRootItem() const
Возвращает невидимый корневой элемент модели.
Невидимый корневой элемент предоставляет доступ к элементам верхнего уровня модели через API QStandardItem, что позволяет писать функции, которые могут обрабатывать элементы верхнего уровня и их дочерние элементы одинаково; например, рекурсивные функции, связанные с моделью дерева.
Примечание: Вызов index() для объекта QStandardItem, полученного с помощью этой функции, некорректен.
QStandardItem *QStandardItemModel::item(int row, int column = 0) const
Возвращает элемент для заданной row и column, если он был задан; в противном случае возвращает nullptr.
См. также setItem(), takeItem() и itemFromIndex().
[override virtual] QMap<int, QVariant> QStandardItemModel::itemData(const QModelIndex &index) const
Реализует: QAbstractItemModel::itemData(const QModelIndex &index) const.
См. также setItemData().
QStandardItem *QStandardItemModel::itemFromIndex(const QModelIndex &index) const
Возвращает указатель на QStandardItem, связанный с заданным index.
Вызов этой функции обычно является начальным шагом при обработке сигналов на основе QModelIndex от представления, таких как QAbstractItemView::activated(). В вашем слоте вы вызываете itemFromIndex() с QModelIndex, переданным сигналом, в качестве аргумента, чтобы получить указатель на соответствующий QStandardItem.
Обратите внимание, что эта функция лениво создаёт элемент для индекса (используя itemPrototype()), и устанавливает его в таблицу дочерних элементов родительского элемента, если в этом индексе ещё нет элемента.
Если index — недействительный индекс, эта функция возвращает nullptr.
См. также indexFromItem().
const QStandardItem *QStandardItemModel::itemPrototype() const
Возвращает шаблон элемента, используемый моделью. Модель использует шаблон элемента как фабрику элементов при необходимости создания новых элементов по требованию (например, когда представление или делегат элемента вызывают setData()).
См. также setItemPrototype().
[override virtual] QMimeData *QStandardItemModel::mimeData(const QModelIndexList &indexes) const
Реализует: QAbstractItemModel::mimeData(const QModelIndexList &indexes) const.
[override virtual] QStringList QStandardItemModel::mimeTypes() const
Реализует: QAbstractItemModel::mimeTypes() const.
[override virtual] void QStandardItemModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
Реализует: QAbstractItemModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const.
[override virtual] QModelIndex QStandardItemModel::parent(const QModelIndex &child) const
Реализует: QAbstractItemModel::parent(const QModelIndex &index) const.
[override virtual] bool QStandardItemModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
Реализует: QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent).
[override virtual] bool QStandardItemModel::removeRows(int row, int count, const QModelIndex &parent = QModelIndex())
Реализует: QAbstractItemModel::removeRows(int row, int count, const QModelIndex &parent).
[override virtual] QHash<int, QByteArray> QStandardItemModel::roleNames() const
Реализует: QAbstractItemModel::roleNames() const.
reimp
[override virtual] int QStandardItemModel::rowCount(const QModelIndex &parent = QModelIndex()) const
Реализует: QAbstractItemModel::rowCount(const QModelIndex &parent) const.
См. также setRowCount().
void QStandardItemModel::setColumnCount(int columns)
Устанавливает количество столбцов в этой модели на columns. Если это значение меньше, чем columnCount(), данные в ненужных столбцах удаляются.
См. также columnCount() и setRowCount().
[override virtual] bool QStandardItemModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
Реализует: QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role).
См. также data().
[override virtual] bool QStandardItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)
Реализует: QAbstractItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role).
См. также headerData().
void QStandardItemModel::setHorizontalHeaderItem(int column, QStandardItem *item)
Устанавливает элемент горизонтальной заголовка для column в item. Модель принимает владение элементом. При необходимости, количество столбцов увеличивается, чтобы вместить элемент. Предыдущий элемент заголовка (если он был) удаляется.
См. также horizontalHeaderItem(), setHorizontalHeaderLabels() и setVerticalHeaderItem().
void QStandardItemModel::setHorizontalHeaderLabels(const QStringList &labels)
Устанавливает метки горизонтальной заголовка, используя labels. При необходимости, количество столбцов увеличивается до размера labels.
См. также setHorizontalHeaderItem().
void QStandardItemModel::setItem(int row, int column, QStandardItem *item)
Устанавливает элемент для заданной строки row и столбца column на item. Модель принимает во владение элемент. При необходимости, количество строк и столбцов увеличивается, чтобы вместить элемент. Предыдущий элемент в заданном месте (если он был) удаляется.
См. также item().
void QStandardItemModel::setItem(int row, QStandardItem *item)
Это перегруженный метод.
[override virtual] bool QStandardItemModel::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)
Переопределяет: QAbstractItemModel::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles).
См. также itemData().
void QStandardItemModel::setItemPrototype(const QStandardItem *item)
Устанавливает прототип элемента для модели на указанный элемент item. Модель принимает во владение прототип.
Прототип элемента действует как фабрика QStandardItem, полагаясь на функцию QStandardItem::clone(). Чтобы предоставить свой собственный прототип, создайте подкласс QStandardItem, переопределите QStandardItem::clone() и установите прототип в качестве экземпляра вашего пользовательского класса. Всякий раз, когда QStandardItemModel нуждается в создании элемента по требованию (например, когда представление или делегат элементов вызывает setData()), новые элементы будут экземплярами вашего пользовательского класса.
См. также itemPrototype() и QStandardItem::clone().
void QStandardItemModel::setItemRoleNames(const QHash<int, QByteArray> &roleNames)
Устанавливает имена ролей элемента на roleNames.
void QStandardItemModel::setRowCount(int rows)
Устанавливает количество строк в этой модели на rows. Если это значение меньше rowCount(), данные в нежелательных строках удаляются.
См. также rowCount() и setColumnCount().
void QStandardItemModel::setVerticalHeaderItem(int row, QStandardItem *item)
Устанавливает вертикальный элемент заголовка для строки row на item. Модель принимает во владение элемент. При необходимости, количество строк увеличивается, чтобы вместить элемент. Предыдущий элемент заголовка (если он был) удаляется.
См. также verticalHeaderItem(), setVerticalHeaderLabels(), и setHorizontalHeaderItem().
void QStandardItemModel::setVerticalHeaderLabels(const QStringList &labels)
Устанавливает вертикальные метки заголовка, используя labels. При необходимости, количество строк увеличивается до размера labels.
См. также setVerticalHeaderItem().
[override virtual] void QStandardItemModel::sort(int column, Qt::SortOrder order = Qt::AscendingOrder)
Переопределяет: QAbstractItemModel::sort(int column, Qt::SortOrder order).
[override virtual] Qt::DropActions QStandardItemModel::supportedDropActions() const
Переопределяет: QAbstractItemModel::supportedDropActions() const.
QStandardItemModel поддерживает копирование и перемещение.
QList<QStandardItem *> QStandardItemModel::takeColumn(int column)
Удаляет заданный столбец column без удаления элементов столбца и возвращает список указателей на удаленные элементы. Модель отказывается от владения элементами. Для элементов в столбце, которые не были установлены, соответствующие указатели в списке будут nullptr.
См. также takeRow().
QStandardItem *QStandardItemModel::takeHorizontalHeaderItem(int column)
Удаляет горизонтальный элемент заголовка в столбце column из заголовка без удаления его и возвращает указатель на элемент. Модель отказывается от владения элементом.
См. также horizontalHeaderItem() и takeVerticalHeaderItem().
QStandardItem *QStandardItemModel::takeItem(int row, int column = 0)
Удаляет элемент в позиции (row, column) без удаления его. Модель отказывается от владения элементом.
См. также item(), takeRow(), и takeColumn().
QList<QStandardItem *> QStandardItemModel::takeRow(int row)
Удаляет заданную строку row без удаления элементов строки и возвращает список указателей на удаленные элементы. Модель отказывается от владения элементами. Для элементов в строке, которые не были установлены, соответствующие указатели в списке будут nullptr.
См. также takeColumn().
QStandardItem *QStandardItemModel::takeVerticalHeaderItem(int row)
Удаляет вертикальный элемент заголовка в строке row из заголовка без удаления его и возвращает указатель на элемент. Модель отказывается от владения элементом.
См. также verticalHeaderItem() и takeHorizontalHeaderItem().
QStandardItem *QStandardItemModel::verticalHeaderItem(int row) const
Возвращает вертикальный элемент заголовка для строки row, если он был установлен; в противном случае возвращает nullptr.
См. также setVerticalHeaderItem() и horizontalHeaderItem().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qstandarditemmodel.html