class QStandardItemModel#

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

Inheritance diagram of PySide6.QtGui.QStandardItemModel

概要#

属性#

方法#

信号#

注释

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译存在问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE 上创建工单来告知我们。

详细描述#

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

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` 创建表格的示例。

model = QStandardItemModel(4, 4)
for row in range(0, model.rowCount()):
    for column in range(0, model.columnCount()):
        item = QStandardItem(QString("row %0, column %1").arg(row).arg(column))
        model.setItem(row, column, item)

以下是一个使用 `QStandardItemModel` 创建树的示例。

model = QStandardItemModel()
parentItem = model.invisibleRootItem()
for i in range(0, 4):
    item = QStandardItem(QString("item %0").arg(i))
    parentItem.appendRow(item)
    parentItem = item

设置模型到视图后,您通常想要响应用户动作,如点击项。由于 QAbstractItemView 提供基于 QModelIndex 的信号和函数,您需要一种方法来获取对应于给定 QModelIndex 的 `QStandardItem`,反之亦然。`itemFromIndex()` 和 `indexFromItem()` 提供了这种映射。`itemFromIndex()` 的典型用例包括获取视图当前索引处的项,以及获取对应于 QAbstractItemView 信号(如 QAbstractItemView::clicked())的索引的项。首先,将视图的信号连接到您的类中的槽

treeView = QTreeView(self)
treeView.setModel(myStandardItemModel)
treeView.clicked.connect(
        self.clicked)

当接收到信号时,您在给定的模型索引上调用 `itemFromIndex()` 来获取项目指针

def clicked(self, index):

    item = myStandardItemModel.itemFromIndex(index)
    # Do stuff with the item ...

相反,当您想要调用接受索引作为参数的模型/视图函数时,您必须获取项的 QModelIndex。您可以通过使用模型的 `indexFromItem()` 函数获取索引,或者等效地,通过调用 `index()`

treeView.scrollTo(item.index())

当然,您不必使用基于项的方法;您可以在与模型交互时完全依赖 QAbstractItemModel 接口,或者根据需要使用两种方法的组合。

另请参阅

QStandardItem 模型/视图 编程 简单的QAbstractItemModel 模型 示例项目 视图 便利类

注释

当使用 from __feature__ import true_property 时,可以直接使用属性,否则可以通过访问函数进行访问。

属性sortRole: int#

此属性存储用于在排序项时查询模型数据的项角色。

默认值为 Qt::DisplayRole。

另请参阅

sort() sortChildren()

访问函数
__init__(rows, columns[, parent=None])#
参数:
  • rows – int

  • columns – int

  • parentQObject

构建一个新项模型,它最初具有 rows 行和 columns 列,并且具有给定的 parent

__init__([parent=None])
参数:

parentQObject

构建一个新的项模型,具有给定的 parent

appendColumn(items)#
参数:

items – QStandardItem 列表

添加包含 items 的列。如果需要,行数将增加到 items 的大小。

appendRow(item)#
参数:

itemQStandardItem

这是一个重载函数。

当构建只有一列的列表或树时,此函数提供了一个追加单个新 item 的简单方法。

appendRow(items)
参数:

items – QStandardItem 列表

向模型中添加一个包含 items 的行。如果需要,列数会增加到与 items 大小相同。

clear()#

从模型中删除所有项(包括标题项)并将行数和列数设置为零。

另请参阅

removeColumns() removeRows()

findItems(text[, flags=Qt.MatchExactly[, column=0]])#
参数:
  • text – str

  • flagsMatchFlag 的组合

  • column – int

返回类型::

QStandardItem 的列表

返回类型::

horizontalHeaderItem(column)#
参数:

column – int

返回类型::

QStandardItem

如果已设置 column 的水平标题项,则返回该水平标题项;否则返回 None

indexFromItem(item)#
参数:

itemQStandardItem

返回类型::

QModelIndex

返回与给定 item 关联的 QModelIndex。

在您需要执行需要项的 QModelIndex 的操作时使用此函数,例如 QAbstractItemView::scrollTo()。index() 提供方便;它等同于调用此函数。

另请参阅

itemFromIndex() index()

insertColumn(column, items)#
参数:
  • column – int

  • items – QStandardItem 列表

在指定位置column插入包含items的列。如有必要,行数将增加到与items的大小一致。

insertRow(row, item)#
参数:

这是一个重载函数。

在指定位置row插入包含item的行。

当构建只有一个列的列表或树时,此函数提供了一个方便的方法来追加单个新项目。

insertRow(row, items)
参数:
  • row – int

  • items – QStandardItem 列表

在指定位置row插入包含items的行。如有必要,列数将增加到与items的大小一致。

invisibleRootItem()#
返回类型::

QStandardItem

返回模型的无缝根项。

无缝根项通过QStandardItem API 提供对模型顶层项的访问,从而使得可以统一处理顶层项及其子项;例如,涉及树模型的递归函数。

注释

对从此函数获取的QStandardItem对象调用 index() 是无效的。

item(row[, column=0])#
参数:
  • row – int

  • column – int

返回类型::

QStandardItem

返回给定rowcolumn的项,如果已设置则返回;否则返回 None。

itemChanged(item)#
参数:

itemQStandardItem

此信号在item的数据更改时发出。

itemFromIndex(index)#
参数:

indexQModelIndex

返回类型::

QStandardItem

返回与给定索引关联的 QStandardItem 的指针。

在处理基于QModelIndex的视图信号(如QAbstractItemView::activated())时,调用此函数通常是第一步。在你的槽函数中,使用携带信号的QModelIndex作为参数调用itemFromIndex(),以获得相应的QStandardItem 指针。

请注意,此函数将对索引(使用itemPrototype() )懒加载项,并在父项的子表中设置该项,如果在该索引处不存在项。

如果index是无效索引,此函数返回 None

另请参阅

indexFromItem()

itemPrototype()#
返回类型::

QStandardItem

返回模型使用的项原型。在需要按需构造新项时(例如,当视图或项代理调用setData() 时),模型使用项原型作为项生产工厂。

另请参阅

setItemPrototype()

setColumnCount(columns)#
参数:

columns – int

将此模型的列数设置为columns。如果此值小于columnCount(),则丢弃不需要列中的数据。

另请参阅

columnCount() setRowCount()

setHorizontalHeaderItem(column, item)#
参数:

的水平表头项设置为。模型将拥有该项的所有权。如果需要,列数会增加以适应项。删除之前的表头项(如果有)。

setHorizontalHeaderLabels(labels)#
参数:

labels – 字符串列表

使用labels设置水平表头标签。如果需要,列数将增加到labels的大小。

setItem(row, item)#
参数:

这是一个重载函数。

setItem(row, column, item)
参数:

将给定的项设置为。模型将拥有项的所有权。如果需要,行数和列数会增加以适应项。删除给定位置之前的项(如果有)。

另请参阅

item()

setItemPrototype(item)#
参数:

itemQStandardItem

将模型的项原型设置为指定的。模型将拥有原型的所有权。

项原型作为一个QStandardItem工厂,通过依赖于clone()函数。为了提供自己的原型,从QStandardItem派生,重写clone()并将原型设置为您的自定义类的实例。每次QStandardItemModel需要按需创建项(例如,当一个视图或项代理调用setData() 时)时,新项将是您自定义类的实例。

另请参阅

itemPrototype() clone()

setItemRoleNames(roleNames)#
参数:

roleNames – 键为int类型,值为QByteArray类型的字典。

将item的角色名设置为roleNames

setRowCount(rows)#
参数:

rows – int

将此模型中的行数设置为rows。如果小于rowCount(),则丢弃不再需要的行中的数据。

另请参阅

rowCount() setColumnCount()

setSortRole(role)#
参数:

role – int

另请参阅

sortRole()

属性 sortRoleᅟ 的设置者。

setVerticalHeaderItem(row, item)#
参数:

row设置垂直标题项为item。模型将获取对item的所有权。如有必要,行数将增加到适应项的大小。删除以前的标题项(如果有的话)。

setVerticalHeaderLabels(labels)#
参数:

labels – 字符串列表

使用labels设置垂直标题标签。如有必要,行数将增加到与labels的大小相同。

sortRole()#
返回类型::

int

另请参阅

setSortRole()

属性 sortRoleᅟ 的获取者。

takeColumn(column)#
参数:

column – int

返回类型::

QStandardItem 的列表

删除指定的column而不删除列项目,并返回已删除项目的指针列表。模型释放项目所有权。对于未设置的列中的项目,列表中的相应指针将是None

另请参阅

takeRow()

takeHorizontalHeaderItem(column)#
参数:

column – int

返回类型::

QStandardItem

从标题中删除位于column的水平标题项,而不会删除它,并返回对项的指针。模型释放项的所有权。

takeItem(row[, column=0])#
参数:
  • row – int

  • column – int

返回类型::

QStandardItem

不删除项目而移除位于(row, column)处的项目。模型释放项目所有权。

takeRow(row)#
参数:

row – int

返回类型::

QStandardItem 的列表

不删除指定的row,而不删除行项目,并返回已删除项目的指针列表。模型释放项目所有权。对于行中未设置的项目,列表中的相应指针将是None

另请参阅

takeColumn()

takeVerticalHeaderItem(row)#
参数:

row – int

返回类型::

QStandardItem

从标题删除位于row的垂直标题项,而不会删除它,并返回对项的指针。模型释放项的所有权。

verticalHeaderItem(row)#
参数:

row – int

返回类型::

QStandardItem

返回行 row 的垂直表头项,如果已设置则返回;否则返回 None