PySide6.QtGui.QStandardItemModel

class QStandardItemModel

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

PySide6.QtGui.QStandardItemModel 的继承图

概要

属性

  • sortRoleᅟ - 用于在排序项目时查询模型数据的项目角色

方法

信号

注意

本文档可能包含从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时,属性可以直接使用,否则通过访问器函数使用。

property sortRoleᅟ: int

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

默认值为 Qt::DisplayRole。

另请参阅

sort() sortChildren()

Access functions:
__init__([parent=None])
Parameters:

父对象QObject

使用给定的parent构建一个新的项目模型。

__init__(rows, columns[, parent=None])
Parameters:
  • rows – int

  • columns – 整数

  • parentQObject

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

appendColumn(items)
Parameters:

items – QStandardItem 的列表

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

appendRow(item)
Parameters:

项目QStandardItem

这是一个重载函数。

在构建只有一个列的列表或树时,此函数提供了一种方便的方式来追加一个新的item

appendRow(items)
Parameters:

items – QStandardItem 的列表

追加一行包含items。如有必要,列数将增加到items的大小。

clear()

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

另请参阅

removeColumns() removeRows()

findItems(text[, flags=Qt.MatchExactly[, column=0]])
Parameters:
  • 文本 – str

  • flagsMatchFlag 的组合

  • column – 整数

Return type:

QStandardItem的列表

返回与给定text匹配的项目列表,使用给定的flags,在给定的column中。

horizontalHeaderItem(column)
Parameters:

– int

Return type:

QStandardItem

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

indexFromItem(item)
Parameters:

项目QStandardItem

Return type:

QModelIndex

返回与给定item关联的QModelIndex。

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

另请参阅

itemFromIndex() index()

insertColumn(column, items)
Parameters:
  • column – 整数

  • items – QStandardItem 的列表

column列插入包含items的列。如有必要,行数将增加到items的大小。

insertRow(row, item)
Parameters:

这是一个重载函数。

row 处插入一行,包含 item

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

insertRow(row, items)
Parameters:
  • row – int

  • items – QStandardItem 的列表

row处插入一行,包含items。如有必要,列数将增加到items的大小。

invisibleRootItem()
Return type:

QStandardItem

返回模型的不可见根项。

不可见的根项通过QStandardItem API提供了对模型顶层项的访问,使得可以编写能够以统一方式处理顶层项及其子项的函数;例如,涉及树模型的递归函数。

注意

从此函数检索到的QStandardItem对象上调用index()是无效的。

item(row[, column=0])
Parameters:
  • row – int

  • column – 整数

Return type:

QStandardItem

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

itemChanged(item)
Parameters:

项目QStandardItem

每当item的数据发生变化时,都会发出此信号。

itemFromIndex(index)
Parameters:

索引QModelIndex

Return type:

QStandardItem

返回一个指向与给定index关联的QStandardItem的指针。

调用此函数通常是处理来自视图的基于QModelIndex的信号(如QAbstractItemView::activated())时的初始步骤。在您的槽函数中,您调用itemFromIndex(),并将信号携带的QModelIndex作为参数传递,以获取指向相应QStandardItem的指针。

请注意,如果该索引处尚不存在任何项目,此函数将懒散地创建一个项目(使用itemPrototype()),并将其设置在父项目的子表中。

如果 index 是一个无效的索引,此函数将返回 None

另请参阅

indexFromItem()

itemPrototype()
Return type:

QStandardItem

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

另请参阅

setItemPrototype()

setColumnCount(columns)
Parameters:

columns – int

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

另请参阅

columnCount() setRowCount()

setHorizontalHeaderItem(column, item)
Parameters:

column的水平标题项设置为item。模型将拥有该项目的所有权。如有必要,列数将增加以适应该项目。先前的标题项(如果有的话)将被删除。

setHorizontalHeaderLabels(labels)
Parameters:

labels – 字符串列表

使用labels设置水平标题标签。如有必要,列数将增加到labels的大小。

setItem(row, item)
Parameters:

这是一个重载函数。

setItem(row, column, item)
Parameters:

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

另请参阅

item()

setItemPrototype(item)
Parameters:

项目QStandardItem

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

项目原型通过依赖clone()函数,充当QStandardItem的工厂。要提供您自己的原型,请子类化QStandardItem,重新实现clone(),并将原型设置为您的自定义类的实例。每当QStandardItemModel需要按需创建项目时(例如,当视图或项目委托调用setData()时),新项目将是您的自定义类的实例。

另请参阅

itemPrototype() clone()

setItemRoleNames(roleNames)
Parameters:

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

将项目角色名称设置为roleNames

setRowCount(rows)
Parameters:

行数 – int

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

另请参阅

rowCount() setColumnCount()

setSortRole(role)
Parameters:

角色 – int

另请参阅

sortRole()

属性 sortRoleᅟ 的设置器。

setVerticalHeaderItem(row, item)
Parameters:

row的垂直标题项设置为item。模型将拥有该项目的所有权。如果需要,行数会增加以适应该项目。先前的标题项(如果有的话)将被删除。

setVerticalHeaderLabels(labels)
Parameters:

labels – 字符串列表

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

sortRole()
Return type:

整数

另请参阅

setSortRole()

属性 sortRoleᅟ 的获取器。

takeColumn(column)
Parameters:

– int

Return type:

QStandardItem的列表

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

另请参阅

takeRow()

takeHorizontalHeaderItem(column)
Parameters:

– int

Return type:

QStandardItem

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

takeItem(row[, column=0])
Parameters:
  • row – int

  • column – 整数

Return type:

QStandardItem

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

takeRow(row)
Parameters:

– 整数

Return type:

QStandardItem的列表

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

另请参阅

takeColumn()

takeVerticalHeaderItem(row)
Parameters:

– 整数

Return type:

QStandardItem

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

verticalHeaderItem(row)
Parameters:

– 整数

Return type:

QStandardItem

返回行row的垂直标题项(如果已设置);否则返回None