QStandardItemModel 类
QStandardItemModel 类提供了一个通用的模型用于存储自定义数据。 更多...
头文件 | #include <QStandardItemModel> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
继承 | QAbstractItemModel |
属性
- sortRole : int
公共函数
QStandardItemModel(QObject *parent = nullptr) | |
QStandardItemModel(int rows, int columns, QObject *parent = nullptr) | |
虚拟 | ~QStandardItemModel() |
void | appendColumn(const QList<QStandardItem *> &items) |
void | appendRow(const QList<QStandardItem *> &items) |
void | appendRow(QStandardItem *item) |
QBindable<int> | bindableSortRole() |
void | clear() |
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 | setSortRole(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 |
重实现的公共函数
virtual bool | clearItemData(const QModelIndex &index) override |
virtual int | columnCount(const QModelIndex &parent = QModelIndex()) const override |
virtual QVariant | data(const QModelIndex &index, int role = Qt::DisplayRole) const override |
virtual bool | dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override |
virtual Qt::ItemFlags | flags(const QModelIndex &index) const override |
virtual bool | hasChildren(const QModelIndex &parent = QModelIndex()) const override |
virtual QVariant | headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override |
virtual QModelIndex | index(int row, int column, const QModelIndex &parent = QModelIndex()) const override |
virtual bool | insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override |
virtual bool | insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override |
virtual QMap<int, QVariant> | itemData(const QModelIndex &index) const override |
virtual QMimeData * | mimeData(const QModelIndexList &indexes) const override |
virtual QStringList | mimeTypes() const override |
virtual void | multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const override |
virtual QModelIndex | parent(const QModelIndex &child) const override |
virtual bool | removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override |
virtual bool | removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override |
virtual QHash<int, QByteArray> | roleNames() const override |
virtual int | rowCount(const QModelIndex &parent = QModelIndex()) const override |
virtual bool | setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override |
virtual bool | setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override |
virtual bool | setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) override |
virtual void | sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override |
虚函数 | 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的信号和函数,因此需要一种方式来获取与给定的QModelIndex对应QStandardItem,反之亦然。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、简单树模型示例 和 项目视图便利类。
属性文档
[可绑定]
sortRole : int
注意:此属性支持 QProperty 绑定。
此属性包含了用于在排序项时查询模型数据的项角色
默认值是 Qt::DisplayRole。
另请参阅 sort() 和 QStandardItem::sortChildren。
成员函数文档
[显式]
QStandardItemModel::QStandardItemModel(QObject *parent = nullptr)
使用给定的 parent 构造一个新的项目模型。
QStandardItemModel::QStandardItemModel(int rows, int columns, QObject *parent = nullptr)
构造一个新的项目模型,该模型最初具有 rows 行和 columns 列,并且具有给定的 parent。
[虚拟 noexcept]
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。
[重写虚函数]
bool QStandardItemModel::clearItemData(const QModelIndex &index)
重写 QAbstractItemModel::clearItemData(const QModelIndex &index)。
[重写虚函数]
int QStandardItemModel::columnCount(const QModelIndex &parent = QModelIndex()) const
重写 QAbstractItemModel::columnCount(const QModelIndex &parent) const。
另请参阅 setColumnCount。
[重写虚函数]
QVariant QStandardItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const
重写 QAbstractItemModel::data(const QModelIndex &index, int role) const。
另请参阅 setData。
[重写虚函数]
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 中检索到匹配的项列表。
[重写虚函数]
Qt::ItemFlags QStandardItemModel::flags(const QModelIndex &index) const
重写: QAbstractItemModel::flags(const QModelIndex &index) const。
[重写虚函数]
bool QStandardItemModel::hasChildren(const QModelIndex &parent = QModelIndex()) const
重写: QAbstractItemModel::hasChildren(const QModelIndex &parent) const。
[重写虚函数]
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
如果已设置列,则返回水平表头项目;否则返回nullptr
。
另请参阅setHorizontalHeaderItem()和verticalHeaderItem。
[重写虚函数]
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。
当您想执行需要项目QModelIndex的操作,如QAbstractItemView::scrollTo()时,使用此函数。 QStandardItem::index()作为便利函数提供;它等价于调用此函数。
另请参阅itemFromIndex()和QStandardItem::index。
void QStandardItemModel::insertColumn(int column, const QList<QStandardItem *> &items)
在列中插入包含项目的列。如果需要,将行数增加到项目的大小。
另请参阅takeColumn(),appendColumn()和insertRow。
bool QStandardItemModel::insertColumn(int column, const QModelIndex &parent = QModelIndex())
在父指定的子项中给定的列之前插入单个列。如果成功插入列,则返回true
;否则返回false
。
另请参阅 insertColumns()、insertRow() 和 removeColumn()。
[重载虚函数]
bool QStandardItemModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
重实现: QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent)
void 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())
在 parent 指定的子项目中给定 row 之前插入一个单独的行。如果行被插入,则返回 true
;否则返回 false
。
另请参阅 insertRows()、insertColumn() 和 removeRow()。
[重载虚函数]
bool QStandardItemModel::insertRows(int row, int count, const QModelIndex &parent = QModelIndex())
重实现: QAbstractItemModel::insertRows(int row, int count, const QModelIndex &parent)
QStandardItem *QStandardItemModel::invisibleRootItem() const
返回模型的不可见根项。
不可见根项通过 QStandardItem API 提供了对模型顶层项的访问,使得可以编写可以以统一方式处理顶级项及其子项的函数;例如,涉及树模型的递归函数。
注意:在使用从该函数检索到的 QStandardItem 对象调用 index() 是无效的。
QStandardItem *QStandardItemModel::item(int row, int column = 0) const
如果已设置,则返回给定 row 和 column 的项;否则返回 nullptr
。
另请参阅 setItem(),takeItem() 和 itemFromIndex()。
[信号]
void QStandardItemModel::itemChanged(QStandardItem *item)
当item的数据发生变化时,该信号会被触发。
[重写虚函数]
QMap<int, QVariant> QStandardItemModel::itemData(const QModelIndex &index) const
重实:QAbstractItemModel::itemData(const QModelIndex &index) const.
另请参阅 setItemData().
QStandardItem *QStandardItemModel::itemFromIndex(const QModelIndex &index) const
返回与给定index关联的QStandardItem的指针。
调用此函数通常是在处理从视图(如 QAbstractItemView::activated)中基于QModelIndex的信号时进行的初始步骤。在你的槽函数中,你调用itemFromIndex(),将信号携带的QModelIndex作为参数传递,以获得对应的QStandardItem的指针。
注意,此函数将延迟为索引创建一个项(使用itemPrototype()),如果在该索引不存在项,则将其设置在父项的子表中。
如果index是无效索引,此函数返回nullptr
。
另请参阅 indexFromItem().
const QStandardItem *QStandardItemModel::itemPrototype() const
返回模型使用的项原型。当模型需要按需构建新项时(例如,视图或项代理调用setData()),它会将项原型用作项工厂。
另请参阅 setItemPrototype().
[重写虚函数]
QMimeData *QStandardItemModel::mimeData(const QModelIndexList &indexes) const
重实:QAbstractItemModel::mimeData(const QModelIndexList &indexes) const.
[重写虚函数]
QStringList QStandardItemModel::mimeTypes() const
重实:QAbstractItemModel::mimeTypes() const.
[重写虚函数]
void QStandardItemModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
重实:QAbstractItemModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const.
[重写虚函数]
QModelIndex QStandardItemModel::parent(const QModelIndex &child) const
重新实现:QAbstractItemModel::parent(const QModelIndex &index) const.
[覆盖虚函数]
bool QStandardItemModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
重新实现:QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent).
[覆盖虚函数]
bool QStandardItemModel::removeRows(int row, int count, const QModelIndex &parent = QModelIndex())
重新实现:QAbstractItemModel::removeRows(int row, int count, const QModelIndex &parent).
[覆盖虚函数]
QHash<int, QByteArray> QStandardItemModel::roleNames() const
重新实现:QAbstractItemModel::roleNames() const.
reimp
[覆盖虚函数]
int QStandardItemModel::rowCount(const QModelIndex &parent = QModelIndex()) const
重新实现:QAbstractItemModel::rowCount(const QModelIndex &parent) const.
另请参阅setRowCount().
void QStandardItemModel::setColumnCount(int columns)
将此模型中的列数设置为 columns。如果这小于 columnCount(),则丢弃不想要的列中的数据。
另请参阅columnCount() 和 setRowCount().
[覆盖虚函数]
bool QStandardItemModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
重新实现:QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role).
另请参阅data().
[覆盖虚函数]
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)
这是一个重载函数。
[继承虚拟]
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。模型将获取原型的所有权。
项目原型 acted as a 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)
设置 行 的垂直表头项为 项。模型将拥有该项。如果需要,行数将增加以适应该项。如果以前有,则删除上一个表头项。
另请参阅 verticalHeaderItem(),setVerticalHeaderLabels() 和 setHorizontalHeaderItem。
void QStandardItemModel::setVerticalHeaderLabels(const QStringList &labels)
使用 labels 设置垂直表头标签。如果需要,行数将增加到与 labels 的大小一样。
另请参阅 setVerticalHeaderItem。
[重写虚函数]
void QStandardItemModel::sort(int column, Qt::SortOrder order = Qt::AscendingOrder)
重新实现: QAbstractItemModel::sort(int column, Qt::SortOrder order)。
[重写虚函数]
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().
© 2024 Qt 公司有限公司。此处包含的文档贡献的版权归其各自的所有者。此处提供的文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可。Qt 及其标志是芬兰及其它国家和地区的 Qt 公司的 商标。所有其它商标均为其各自所有者的财产。