PySide6.QtGui.QStandardItemModel¶
- class QStandardItemModel¶
QStandardItemModel
类提供了一个用于存储自定义数据的通用模型。更多…概要¶
属性¶
sortRoleᅟ
- 用于在排序项目时查询模型数据的项目角色
方法¶
def
__init__()
def
appendColumn()
def
appendRow()
def
clear()
def
findItems()
def
indexFromItem()
def
insertColumn()
def
insertRow()
def
item()
def
itemFromIndex()
def
itemPrototype()
def
setColumnCount()
def
setItem()
def
setRowCount()
def
setSortRole()
def
sortRole()
def
takeColumn()
def
takeItem()
def
takeRow()
信号¶
def
itemChanged()
注意
本文档可能包含从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:
使用给定的
parent
构建一个新的项目模型。- __init__(rows, columns[, parent=None])
- Parameters:
rows – int
columns – 整数
parent –
QObject
构建一个新的项目模型,该模型最初具有
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
flags –
MatchFlag
的组合column – 整数
- Return type:
返回与给定
text
匹配的项目列表,使用给定的flags
,在给定的column
中。- horizontalHeaderItem(column)¶
- Parameters:
列 – int
- Return type:
如果已设置,则返回
column
的水平标题项;否则返回None
。- indexFromItem(item)¶
- Parameters:
项目 –
QStandardItem
- Return type:
返回与给定
item
关联的QModelIndex。当您想要执行需要项目QModelIndex的操作时,请使用此函数,例如QAbstractItemView::scrollTo()。
index()
是为了方便提供的;它等同于调用此函数。另请参阅
- insertColumn(column, items)¶
- Parameters:
column – 整数
items – QStandardItem 的列表
在
column
列插入包含items
的列。如有必要,行数将增加到items
的大小。- insertRow(row, item)¶
- Parameters:
row – int
项目 –
QStandardItem
这是一个重载函数。
在
row
处插入一行,包含item
。在构建只有一个列的列表或树时,此函数提供了一种方便的方式来追加单个新项。
- insertRow(row, items)
- Parameters:
row – int
items – QStandardItem 的列表
在
row
处插入一行,包含items
。如有必要,列数将增加到items
的大小。- invisibleRootItem()¶
- Return type:
返回模型的不可见根项。
不可见的根项通过
QStandardItem
API提供了对模型顶层项的访问,使得可以编写能够以统一方式处理顶层项及其子项的函数;例如,涉及树模型的递归函数。注意
从此函数检索到的
QStandardItem
对象上调用index()是无效的。- item(row[, column=0])¶
- Parameters:
row – int
column – 整数
- Return type:
返回给定
row
和column
的项,如果已设置;否则返回None
。- itemChanged(item)¶
- Parameters:
项目 –
QStandardItem
每当
item
的数据发生变化时,都会发出此信号。- itemFromIndex(index)¶
- Parameters:
索引 –
QModelIndex
- Return type:
返回一个指向与给定
index
关联的QStandardItem
的指针。调用此函数通常是处理来自视图的基于QModelIndex的信号(如QAbstractItemView::activated())时的初始步骤。在您的槽函数中,您调用itemFromIndex(),并将信号携带的QModelIndex作为参数传递,以获取指向相应
QStandardItem
的指针。请注意,如果该索引处尚不存在任何项目,此函数将懒散地创建一个项目(使用
itemPrototype()
),并将其设置在父项目的子表中。如果
index
是一个无效的索引,此函数将返回None
。另请参阅
- itemPrototype()¶
- Return type:
返回模型使用的项目原型。当模型需要按需构造新项目时(例如,当视图或项目委托调用
setData()
时),模型使用项目原型作为项目工厂。另请参阅
- setColumnCount(columns)¶
- Parameters:
columns – int
将此模型中的列数设置为
columns
。如果这小于columnCount()
,则不需要的列中的数据将被丢弃。另请参阅
columnCount()
setRowCount()
- setHorizontalHeaderItem(column, item)¶
- Parameters:
column – 整数
项目 –
QStandardItem
将
column
的水平标题项设置为item
。模型将拥有该项目的所有权。如有必要,列数将增加以适应该项目。先前的标题项(如果有的话)将被删除。- setHorizontalHeaderLabels(labels)¶
- Parameters:
labels – 字符串列表
使用
labels
设置水平标题标签。如有必要,列数将增加到labels
的大小。- setItem(row, item)¶
- Parameters:
row – int
项目 –
QStandardItem
这是一个重载函数。
- setItem(row, column, item)
- Parameters:
row – int
column – 整数
项目 –
QStandardItem
将给定的
row
和column
的项设置为item
。模型拥有该项的所有权。如果需要,行数和列数会增加以适应该项。给定位置的先前项(如果有的话)将被删除。另请参阅
- setItemPrototype(item)¶
- Parameters:
项目 –
QStandardItem
将模型的项原型设置为指定的
item
。模型将拥有该原型的所有权。项目原型通过依赖
clone()
函数,充当QStandardItem
的工厂。要提供您自己的原型,请子类化QStandardItem
,重新实现clone()
,并将原型设置为您的自定义类的实例。每当QStandardItemModel
需要按需创建项目时(例如,当视图或项目委托调用setData()
时),新项目将是您的自定义类的实例。另请参阅
- setItemRoleNames(roleNames)¶
- Parameters:
roleNames – 字典,键类型为 .int,值类型为 QByteArray。
将项目角色名称设置为
roleNames
。- setRowCount(rows)¶
- Parameters:
行数 – int
将此模型中的行数设置为
rows
。如果这个值小于rowCount()
,则不需要的行中的数据将被丢弃。另请参阅
rowCount()
setColumnCount()
- setSortRole(role)¶
- Parameters:
角色 – int
另请参阅
属性
sortRoleᅟ
的设置器。- setVerticalHeaderItem(row, item)¶
- Parameters:
row – int
项目 –
QStandardItem
将
row
的垂直标题项设置为item
。模型将拥有该项目的所有权。如果需要,行数会增加以适应该项目。先前的标题项(如果有的话)将被删除。- setVerticalHeaderLabels(labels)¶
- Parameters:
labels – 字符串列表
使用
labels
设置垂直标题标签。如有必要,行数将增加到labels
的大小。- sortRole()¶
- Return type:
整数
另请参阅
属性
sortRoleᅟ
的获取器。- takeColumn(column)¶
- Parameters:
列 – int
- Return type:
移除给定的
column
而不删除列中的项目,并返回指向被移除项目的指针列表。模型释放对项目的所有权。对于列中未设置的项目,列表中的相应指针将为None
。另请参阅
- takeHorizontalHeaderItem(column)¶
- Parameters:
列 – int
- Return type:
从标题中移除位于
column
处的水平标题项而不删除它,并返回指向该项的指针。模型释放该项的所有权。- takeItem(row[, column=0])¶
- Parameters:
row – int
column – 整数
- Return type:
移除位于(
row
,column
)的项目而不删除它。模型释放对该项目的所有权。另请参阅
- takeRow(row)¶
- Parameters:
行 – 整数
- Return type:
移除给定的
row
而不删除行项目,并返回指向被移除项目的指针列表。模型释放对项目的所有权。对于行中未设置的项目,列表中的相应指针将为None
。另请参阅
- takeVerticalHeaderItem(row)¶
- Parameters:
行 – 整数
- Return type:
从标题中移除位于
row
的垂直标题项而不删除它,并返回指向该项的指针。模型释放该项的所有权。- verticalHeaderItem(row)¶
- Parameters:
行 – 整数
- Return type:
返回行
row
的垂直标题项(如果已设置);否则返回None
。