QStandardItemModel 类

QStandardItemModel 类提供了一个通用的模型用于存储自定义数据。 更多...

头文件 #include <QStandardItemModel>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui
继承 QAbstractItemModel

属性

公共函数

QStandardItemModel(QObject *parent = nullptr)
QStandardItemModel(int rows, int columns, QObject *parent = nullptr)
虚拟~QStandardItemModel()
voidappendColumn(const QList<QStandardItem *> &items)
voidappendRow(const QList<QStandardItem *> &items)
voidappendRow(QStandardItem *item)
QBindable<int>bindableSortRole()
voidclear()
QList<QStandardItem *>findItems(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly, int column = 0) const
QStandardItem *horizontalHeaderItem(int column) const
QModelIndexindexFromItem(const QStandardItem *item) const
voidinsertColumn(int column, const QList<QStandardItem *> &items)
boolinsertColumn(int column, const QModelIndex &parent = QModelIndex())
voidinsertRow(int row, const QList<QStandardItem *> &items)
voidinsertRow(int row, QStandardItem *item)
boolinsertRow(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
voidsetColumnCount(int columns)
voidsetHorizontalHeaderItem(int column, QStandardItem *item)
voidsetHorizontalHeaderLabels(const QStringList &labels)
voidsetItem(int row, int column, QStandardItem *item)
voidsetItem(int row, QStandardItem *item)
voidsetItemPrototype(const QStandardItem *item)
voidsetItemRoleNames(const QHash<int, QByteArray> &roleNames)
voidsetRowCount(int rows)
voidsetSortRole(int role)
voidsetVerticalHeaderItem(int row, QStandardItem *item)
voidsetVerticalHeaderLabels(const QStringList &labels)
intsortRole() 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 boolclearItemData(const QModelIndex &index) override
virtual intcolumnCount(const QModelIndex &parent = QModelIndex()) const override
virtual QVariantdata(const QModelIndex &index, int role = Qt::DisplayRole) const override
virtual booldropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
virtual Qt::ItemFlagsflags(const QModelIndex &index) const override
virtual boolhasChildren(const QModelIndex &parent = QModelIndex()) const override
virtual QVariantheaderData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
virtual QModelIndexindex(int row, int column, const QModelIndex &parent = QModelIndex()) const override
virtual boolinsertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual boolinsertRows(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 QStringListmimeTypes() const override
virtual voidmultiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const override
virtual QModelIndexparent(const QModelIndex &child) const override
virtual boolremoveColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual boolremoveRows(int row, int count, const QModelIndex &parent = QModelIndex()) override
virtual QHash<int, QByteArray>roleNames() const override
virtual introwCount(const QModelIndex &parent = QModelIndex()) const override
virtual boolsetData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override
virtual boolsetHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override
virtual boolsetItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) override
virtual voidsort(int column, Qt::SortOrder order = Qt::AscendingOrder) override
虚函数supportedDropActions() const override

信号

voiditemChanged(QStandardItem *item)

详细描述

QStandardItemModel可以用作标准Qt数据类型的存储库。它是模型/视图类之一,是Qt的模型/视图框架的一部分。

QStandardItemModel提供了一个以项为基础的经典方法来处理模型。QStandardItemModel中的项由QStandardItem提供。

QStandardItemModel实现了QAbstractItemModel接口,这意味着模型可以被用于向支持该接口的任何视图提供数据(如QListViewQTableViewQTreeView,以及您的自定义视图)。为了性能和灵活性,您可能希望继承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

如果已设置,则返回给定 rowcolumn 的项;否则返回 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)

将指定 rowcolumn 的项目设置为 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) 位置的项目。模型释放对该项的所有权。

另请参阅 itemtakeRowtakeColumn

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 公司的 商标。所有其它商标均为其各自所有者的财产。