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