116-Model/View- 标准数据模型QStandardltemModel

标准数据模型QStandardltemModel

标准数据模型QStandardItemModel可以存储多行多列的数据

  • 表格数据表格中的每个数据称为数据项QStandardItem
  • 每个数据项下面还可以存储多行多列的子数据表格并形成层级关系,这样会形成比较复杂的结构关系。数据项可以存储文本、图标勾选状态等信息。

用QStandardItemModel创建标准数据模型的方法如下所示其中parent是QObject或继承自QObject的实例对象,rows 和columns 分别是行数和列数

用QStandardItem创建数据项的方法如下所示用QStandardItem(rows,columns)方法可以创建一个含有多行多列子数据项的数据项。

from PySide6.QtGui import QStandardItemModel,QStandardItem

QStandardItemModel(parent: Union[PySide6.QtCore.QObject,NoneType]= None)-> None
QStandardItemModel(rows: int,columns: int,parent: Union[PySide6.QtCore.QObject,NoneType]= None)-> None

QStandardItem(self)-> None
QStandardItem(icon: Union[PySide6.QtGui.QIcon,PySide6.QtGui.QPixmap],text: str)-> None
QStandardItem(Other: PySide6.QtGui.QStandardItem)-> None
QStandardItem(rows: int,columns: int = 1)-> None
QStandardItem(text: str)-> None

标准数据模型QStandardItemModel的常用方法

标准数据模型QStandardItemModel的常用方法如表所示,主要方法介绍如下标

  • 准数据模型最高层的列数和行数用setColumnCount(columns:int)和setRowCount(row;int)方法设置;
    • 用columnCount(parent: QModelIndex)方法和rowCount(parent:QModelIndex)方法可获得某层的列数和行数。
  • 用appendColumn(Sequence[QStandardItem])方法可以添加列;
    • 用appendRow(Sequence[QStandardItem])方法或appendRow(QStandardItem)方法可添加行
    • 用insertColumn(Sequence[QStandardItem])方法和insertRow(Sequence[QStandardItem])方法插人列行;
    • 用takeColumn(column:int)方法和 takeRow(row:int)方法移除列和行。
  • 用setItem(row;int,column;int,item;QStandardItem)方法或 setItem(row; int,item:QStandardItem)方法可以在数据模型中设置数据项,
    • 用item(row:int,column:int=0)方法可以获取数据项,
    • 用takeltem(row:int,column:int=0)方法可移除数据项,
    • 用clear()方法可清除所有的数据项。
  • 用setData(QModelIndex,Any,role =Qt EditRole)方法和setItemData(QModelIndex,Dict[int,Any])方法可以设置数据项的角色数据,
    • 用clearItemData(QModelIndex)方法可以清除数据项上的角色数据。
  • 获得数据项的索引
    • index(row:int,column:int,parent: QModelIndex)
    • indexFromItem(QStandardItem)
    • sibling(row:int,column:int,idx:QModelIndex)
  • 标准数据模型有行表头和列表头
    • 用setHorizontalHeaderItem(column:int,item:QStandardItem)方法和 setVerticalHeaderItem(row;int,item: QStandardItem)方法设置水平表头和竖直表头的数据项;
    • 用takeHorizontalHeaderItem(column;int)方法和takeVerticalHeaderItem(row;int)方法移除表头的数据项,并返回被移除的表头数据项。
QStandardItemModel的方法及参数类型返回值的类型说明
removeRows(row:int,count:int,parent: QModelIndex)bool移除多行
setltem(row: int,column: int,item: QStandardItem)None根据行和列设置项
setltem(row: int,item: QStandardItem)None根据行设置数据项
item(row: int,column: int=0)QStandardItem根据行和列获取项
takeltem(row: int,column: int=0)QStandardItem移除数据项
setData(QModelIndex,Any,role = Qt.EditRole)bool设置角色值
data(QModellndex,role=Qt.DisplayRole)Any获取角色值
setItemData(QModelIndex,Dict[int,Any])bool用字典设置项的值
itemData(QModelIndex)Dict[int,Any]获取多个项的值
setHeaderData(int,Qt.Orientation,Any,role= Qt.EditRole)bool设置表头值
headerData(int,Qt.Orientation,role=Qt.DisplayRole)Any获取表头的值
setHorizontalHeaderltem(column: int,QStandardItem)None设置水平表头的项
setHorizontalHeaderLabels(labels: Sequence[str])None设置水平表头的文本内容
horizontalHeaderItem(column:int)QStandardItem获取水平表头的项
setVerticalHeaderItem(row: int,item: QStandardItem)None设置竖直表头的项
setVerticalHeaderLabels(labels: Sequence[str])None设置竖直表头的文本内容
verticalHeaderItem(row: int)QStandardItem获取竖直表头的项
takeHorizontalHeaderItem(coloumn:int)QStandardItem移除水平表头的项
takeVerticalHeaderItem(row:int)QStandardItem移除竖直表头的项
index(row: int,column: int,parent: QModelIndex)QModelIndex根据行列获取数据项索引
indexFromItem(QStandardItem)QModelIndex根据项获取索引
sibling(row: int,column: int,idx: QModelIndex)QModelIndex获取同级别的索引
invisiblerootItem()QStandardItem获取根目录的项
clear()None清除所有的数据项
clearItemData(index: QModelIndex)bool清除项中的数据
findItems(str,Qt.MatchFlag,column=0)List[QStandardItem]获取满足匹配条件的数据项列表
flags(QModelIndex)Qt.ItemFlags获取数据项的标识
hasChildren(parent:QModelIndex)bool获取是否有子项
itemFromIndex(QModelIndex)QStandardItem根据索引获取项
parent(child: QModelIndex)QModelIndex获取父项的索引
setSortRole(role:int)None设置排序角色
sortRole()int获取排序角色
sort(column:int,order=Qt.AscendingOrder)None根据角色值排序

数据项QStandardItem的常用方法

数据项QStandardItem的常用方法如表所示,主要方法介绍如下

  • 数据项可以设置文本、字体、图标、前景色、背景色勾选状态和提示信息等。
    • 用setText(str)方法设置数据项显示的文本;
    • 用setIcon(QIcon)方法设置图标;
    • 用setFont(QFont)方法设置数据项的字体;
    • 用setForeground(QColor)方法设置前景色;
    • 用setCheckable(bool)方法设置是否可以勾选,
    • 用setCheckState(Qt.CheckState)方法设置勾选状态
  • 数据项下面可以有多行多列子数据项
    • 行和列可以在创建数据项时用构造函数设置,
    • 也可用setRowCount(int)方法和 setColumnCount(int)方法设置;
    • 用rowCount()方法和columnCount()方法获取行和列的数量。
  • 可用多种方法添加插入和移除子数据项的行和列,
    • 用setChild(row:int,column;int,QStandardItem)方法和setChild(row:intQStandardItem)方法设置子数据项;
    • 用row()和column()方法获取数据项所在的行和列;
    • 用child(row:int,column;int=0)方法获取子数据项;
    • 用hasChildren()方法获取是否有子数据项;
    • 用takeChild(row:int;column:int-0)方法移除子数据项,并返回被移除的子数据项。
QStandardltem的方法及参数类型返回值的类型说 明
index()QModelIndex获取数据项的索引
setColumnCount(int)None设置列数
columnCount()Int获取列数
setRowCount(int)None设置行数
rowCount()int获取行数
setChild(row: int.column:int,QStandardltem)None根据行和列设置子数据项
setChild(row:int,QStandardItem)None根据行设置子数据项
hasChildren()bool获取是否有子数据项
child(row: int,column: int=0)QStandardItem根据行和列获取子数据项
takeChild(row: int,column:int=0)QStandardltem移除并返回子数据项
row()、column()int获取数据项所在的行和列
appendColumn(Sequence[QStandardItern.])None添加列
appendRow(Sequence[QStandardItem])None添加行
appendRow(QStandardItem)None添加行
appendRows(Sequence[QStandardItem])None添加多行
insertColumn(column:int,Sequence[QStandardItem])None插人列
insertColumns(column: int,count:int)None插人多列
insertRow(row: int,Sequence[QStandardItem])None插人行
insertRow(row:int,QStandardItem)None插人行
insertRows(row:int,count:int)None插人多行
insertRows(row:int,Sequence[QStandardItem])None插人多行
removeColumn(column:int)None移除列
removeColumns(column: int,count: int)None移除多列
removeRow(row:int)None移除行
removeRows(row:int,count:int)None-移除多行
takeColumn(column:int)List[QStandardItem]移除列,并返回被移除的数据项列表
takeRow(row:int)List[QStandardItem]移除行,并返回被移除的数据项列表
model()QStandardItemModel获取数据模型
parent()QStandardItem获取父数据项
setAutotristate(bool)None设置自动有第3种状态
isAutotristate()bool获取自动有第3种状态
setTristate(bool)None设置是否有弟3种状态
setForeground(brush: Union[QBrush,Qt.BrushStyle,Qt.GlobalColor,QColor,QGradient,QImage,QPixmap])None设置前景色
foreground()QBrush.获取前景画刷
setBackground(brush: Union[QBrush,Qt.BrushStyle,Qt.GlobalColor,QColor:QGradient,QImage,QPixmap])None设置背景色
background()QBrush获取背景画刷
setCheckable(bool)None设置是否可以勾选
setCheckState(Qt.CheckState)None设置勾选状态
checkState()Qt.CheckState获取勾选状态
isCheckable()bool获取是否可以勾选
setData(value: Any,role: int=257)None设置数据
data(role:int=257)Any获取数据
clearData()None清空数据
setDragEnabled(bool)None设置是否可以拖拽
isDragEnabled()bool获取是否可以拖拽
setDropEnabled(bool)None设置是否可以拖放
isDropEnabled()bool获取是否可以拖放
setEditable(bool)None设置是否可以编辑
setEnabled(bool)None设置是否激活
setFlags(Qt.ItemFlag)None设置标识
isEditable()bool获取是否可编辑
isEnabled()bool获取是否激活
isSelectable()bool获取是否可选择
isUserTristate()bool获取是否有用户第3状态
setFont(QFont)None设置字体
setIcon(QIcon)None设置图标
setSelectable(bool)None设置选中状态
setStatusTip(str)None设置状态信息
setText(str)None设置文本
text()str欢取文本
setTextAlignment(Qt.Alignment)None设置文本对齐方式
setToolTip(str)None设置提示信息
setWhatsThis(str)None设置按Shilt+F1键的提示信息
write(QDataStream)None把项写人到数据流中
read(QDataStream)None从数据流中读取项
sortChildren(column:int,order = Qt.AscendingOrder)None对列进行排序

基于item的操作

针对item的常规操作可以使用函数 setText()、setIcon()、setFont()、setForeground()和setBackground()等,可以参考 QListWidget 的相关内容。

可以使用setItem(row,column,item)将 item 插入表中,使用 takeitem(row,column)可以删除item。代码如下:

item = OStandardItem('testItem')
self.model.setItem(row,column,item)

有时候需要合并单元格,这就需要使用 setSpan()函数,用法和举例如下:

# 合并单元格
self.tableview.setSpan(1,0,1,2)
item = QStandardItem(合并单元格)
item.setTextAlignment(Qt.AlignCenter)
self.model.setItem(1,0,item)

角色

一个项目可以有多重角色,对于 item,可以使用函数 setText()、setIcon()、setForeground()等设置 DisplayRole、DecorationRole、ForegroundRole 等角色

这些item的函数使用角色也能实现,举例如下:

item = QStandardItem(value)
item.setData(QColor(155,14,0),role=Qt.ForegroundRole)
item.setData(value+'-toolTip',role=Qt.ToolTipRole)
item.setData(QIcon("images/open.png"),role=Qt.DecorationRole)
self.model.setItem(row,column,item)

model也有 setData0函数,可以实现相同的功能,举例如下:

self.model.setData(self.model.index(4,0),
                   QColor(215,214220),
                   role=Qt.BackgroundRole)

行/列操作使用函数

insertRow()、insertColumn()、removeRow()、removeColumn()可以增加或删除行/列。

  • 使用rowCount()函数可以获取表格的行数

  • 使用columnCount()函数可以获取表格的列数

  • 使用clear0函数可以清空表格

  • 使用fndItems()函数可以搜索模型中的项目

  • 使用sort()函数可以对模型进行排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值