TableView、QStandardItemModel、QItemSelectionModel使用总结

16 篇文章 2 订阅

QStandardItemModel 是标准的以QStandardItem为基础的标准数据模型类,通常与 QTableView 组合成 Model/View 结构,实现通用的二维数据的管理功能。

这几个类之间的关系是:QTableView 是界面视图组件,其关联的数据模型是 QStandardItem Model,关联的项选择模型是 QItemSelectionModel,QStandardItemModel 的数据管理的基本单元是 QStandardItem。

本节介绍 QStandardltemModel 的使用,主要用到以下 3 个类:

1、QTableView:

二维数据表视图组件,有多个行和多个列,每个基本显示单元是一个单元格,通过 setModel() 函数设置一个 QStandardItemModel 类的数据模型之后,一个单元格显示 QStandardItemModel 数据模型中的一个项。

除了常用的设置、查询行高、列宽、行表头、列表头之外,还有下列方法也常用到。

voidsetCornerButtonEnabled(bool enable)设置表格左上角是否设置勾选框,用于全选所有的单元格
voidsetSortingEnabled(bool enable)设置是否支持排序
voidsetSpan(int row, int column, int rowSpanCount, int columnSpanCount)设置单元格合并
virtual voidsetModel(QAbstractItemModel *model) override设置数据模型
virtual voidsetSelectionModel(QItemSelectionModel *selectionModel) override设置选择模型
voidselectRow(int row)选择行
voidshowColumn(int column)选择列
voidsetSelectionBehavior(QAbstractItemView::SelectionBehavior behavior)设置选择时的行为
voidsetSelectionMode(QAbstractItemView::SelectionMode mode)设置选择模式

 

2、QStandardItemModel

继承自QAbstractItemModel,基于项数据的标准数据模型,可以处理二维数据。维护一个二维的项数据数组,每个项是一个 QStandardltem 类的变量,用于存储项的数据、字体格式、对齐方式等。

除了常用的插入行、列、单元格外,常用方法如下。

voidclear()清除模型中数据项
boolclearItemData(const QModelIndex &index)清除QModelIndex中的数据项
QList<QStandardItem *>findItems(const QString &text, Qt::MatchFlags flags = Qt::MatchExactly, int column = 0) const根据指定的column,指定的text,用指定的flags来查询出匹配的项(QStandardItem)。指定的flags默认为相等,可以进行正则匹配。
QStandardItem *horizontalHeaderItem(int column) const指定列的行表头项
QModelIndexindexFromItem(const QStandardItem *item) const查询指定QStandardItem的QModelIndex
QStandardItem *itemFromIndex(const QModelIndex &index) const查询指定QModelIndex的QStandardItem
voidsetColumnCount(int columns)设置列数量,超出设置的列会丢弃。
voidsetHorizontalHeaderItem(int column, QStandardItem *item)设置指定列的行表头
voidsetHorizontalHeaderLabels(const QStringList &labels)设置水平表头
voidsetRowCount(int rows)设置行数量,超出设置的行会丢弃。
voidsetVerticalHeaderItem(int row, QStandardItem *item)设置指定行的列表头
voidsetVerticalHeaderLabels(const QStringList &labels)设置列表头
QStandardItem *verticalHeaderItem(int row) const查询指定row的列表头

 

QStandardltem 常用属性如下:

voidappendColumn(const QList<QStandardItem *> &items)纵向添加QStandardItem
voidappendRow(const QList<QStandardItem *> &items)横向添加QStandardItem
intcolumn() const单元格所在列
QModelIndexindex() const单元格索引
QStandardItemModel *model() const单元格所属QStandardItemModel
introw() const单元格所在行
voidsetAutoTristate(bool tristate)设置是否自动三态选择,全选、不选、部分选择
voidsetBackground(const QBrush &brush)设置背景
voidsetCheckState(Qt::CheckState state)设置选择状态
voidsetCheckable(bool checkable)设置是否可勾选
voidsetDragEnabled(bool dragEnabled)设置是否可拖拽
voidsetDropEnabled(bool dropEnabled)设置是否可接收拖入
voidsetEditable(bool editable)设置是否可编辑
voidsetEnabled(bool enabled)设置是否有效,只有有效情况下才能进行其他交互,比如选择、编辑等
voidsetFont(const QFont &font)设置字体
voidsetForeground(const QBrush &brush)设置前景
voidsetIcon(const QIcon &icon)设置ICON
voidsetSelectable(bool selectable)设置是否可选择
voidsetText(const QString &text)设置单元格文本
voidsetTextAlignment(Qt::Alignment alignment)设置单元格文本对齐方式
voidsetUserTristate(bool tristate)设置是否支持三态选择,全选、不选、部分选择
voidsetFlags(Qt::ItemFlags flags)设置单元格标志,可选标志如下:

 

QModelIndex用于定义QStandardItemModel中QStandardltem的索引

intcolumn() const模型索引所在的列
QVariantdata(int role = Qt::DisplayRole) const索引的指定role值,默认为DisplayRole
Qt::ItemFlagsflags() const索引指向单元格的标志
boolisValid() const索引是否有效
const QAbstractItemModel *model() const该索引所属的QAbstractItemModel模型
introw() const模型索引所在的行
QModelIndexsibling(int row, int column) const指定行列的兄弟索引
QModelIndexsiblingAtColumn(int column) const当前行的列兄弟索引
QModelIndexsiblingAtRow(int row) const当前列的行兄弟索引

 

3、QItemSelectionModel

一个用于跟踪视图组件的单元格选择状态的类,当在 QTableView 选择某个单元格,或多个单元格时,通过 QItemSelectionModel 可以获得选中的单元格的模型索引,为单元格的选择操作提供方便。

QModelIndexcurrentIndex() const当前单元格的QModelIndex索引,当前单元格是键盘可以操作和获取鼠标焦点的单元格
boolhasSelection() const是否有单元被选择
boolisColumnSelected(int column, const QModelIndex &parent) const指定列是否全部被选择
boolisRowSelected(int row, const QModelIndex &parent) const指定行是否全部被选择
boolisSelected(const QModelIndex &index) constQModelIndex指定的单元格是否被选中
const QAbstractItemModel *model() const选择列表模型跟踪的QAbstractItemModel 
QAbstractItemModel *model()选择列表模型跟踪的QAbstractItemModel 
QModelIndexListselectedColumns(int row = 0) const指定行选择的列列表,默认第0行
QModelIndexListselectedIndexes() const选择的索引列表
QModelIndexListselectedRows(int column = 0) const指定列选择的行列表,默认第0列
const QItemSelectionselection() const选择列表模型存储的选择范围QItemSelection
voidsetModel(QAbstractItemModel *model)设置选择列表模型跟踪的QAbstractItemModel
virtual voidselect(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command)根据command选择指定的QItemSelection,command如下:
virtual voidselect(const QModelIndex &index, QItemSelectionModel::SelectionFlags command)根据command选择指定的QModelIndex,command如下:

QItemSelection类管理选择单元格的范围信息

boolcontains(const QModelIndex &index) const判断选择范围是否包含QModelIndex指定的单元格
QModelIndexListindexes() const选择范围的QModelIndex单元格列表
voidmerge(const QItemSelection &other, QItemSelectionModel::SelectionFlags command)合并指定QItemSelection的选择范围方式,只支持ItemSelectionModel::Select, QItemSelectionModel::Deselect,QItemSelectionModel::Toggle
voidselect(const QModelIndex &topLeft, const QModelIndex &bottomRight)选择从topLeft到bottomRight指定的单元格

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值