其他分享
首页 > 其他分享> > Qt学习笔记[11]

Qt学习笔记[11]

作者:互联网

1. QStringListModel


QStringListModel主要用于处理字符串序列,一般与QListView联用。

 

  1. setStringList(const QStringList &strs): 初始化QStringListModel
  2. setModel(): 把数据模型关联到视图组件上
  3. setEditTriggers(): 设置视图组件是否可编辑(该方法不属于QStringListModel)

removeRows: 删除多行

rowCount(): 获取数据模型中的总行数

insertRow(): 插入一空行,通过QListView的currentIndex()方法获取当前索引QModelIndex并调用其row()方法获取行号后执行插入

setData(): 设置不同角色的数据,这里使用Qt::DisplayRole代表显示数据。通过setCurrentIndex让当前项定位于新增项

这里是在末尾增加一行,其方法与上面差不做,只不过是先调用insertRow插入空行后,通过QStringListModel对象获取索引对象并调用setData设置数据

index(row, col): 获取行列对应的单元获取其索引对象

removeRow(): 删除具体行

data(): 获取对应角色的数据

2. QStandardItemModel



QStandardItemModel是以项数据为基础的标准数据模型。一般与QTableView组合成Model/View结构使用。

QStringListModel与QListView组合一般用于处理一维数组

而QStandardItemModel与QTableView组合一般用于处理二维数组,即平面表格类型的数据结构

QStandardItemModel中的每一项都是QStandardItem类对象,该对象用于存储项的数据,字体格式和对齐方式

QStandardItemModel和QTableView中使用QItemSelectionModel作为中间件,其具体过程如下:

  1. 用户对QTableView中的项进行选择
  2. QItemSelectionModel收到了项选择的变化的信号并进入对应槽函数, 并可通过QItemSelectionModel获取对应索引
  3. 通过索引QModelIndex获取对应的QStandardItem对象后进行具体操作命令数据模型QStandardItemModel对数据修改
  4. 数据模型修改数据后的变化显示到视图组件上

setModel(): 把数据模型和视图组件建立起关联

setSelectionModel(): 把选择模型与视图组件建立起关联

setItemDelegateForColumn(col, refOfDelegate): 为对应列设置对应的代理组件

QCoreApplication::applicationDirPath(): 获取应用程序的路径(包含自身可执行文件名)

setRowCount(iNum): 设置数据模型所拥有的行数

setHorizontalHeaderLabels(QStringList):  设置行表头内容

setItem(row, col, QStandardItem *): 设置row行col列的QStandardItem内容

setCheckable(bool): 设置QStandardItem是否可以被选中

setCheckState(Qt::Checked | Qt::Unchecked): 设置QStandardItem的选中状态

columnCount(): 获取QStandardItemModel的总列数

rowCount(): 获取QStandardItemModel的总行数

headerData(): 获取行表头对应列的数据内容

insertRow(): 插入对应行的内容

clearSelection(): 这是QItemSelectionModel的方法,适用于清除所有用户选中的项

setCurrentIndex(): 这是QItemSelectionModel的方法,通过QIndexModel设置对应的当前用户选中的项

currentIndex(): 这是QItemSelectionModel的方法,获取当前QItemSelectionModel中选中项的索引对象

removeRow(): 从QStandardItemModel中删除对应的项

horizontalHeaderItem(col): 根据列号, 获取行表头中的对应列的项

item(row, col): 从QStandardItemModel中获取对应row和col的项指针

text(): 获取QStandardItem中的内容

下面的代码时保存文件内容的方法:

itemFromIndex():  从对应的QModelIndex类对象获取对应的项指针

hasSelection(): 这是QItemSelectionModel的方法,判定QItemSelectionModel中是否有选中的项目

count(): QModelIndexList对象中的QModelIndex对象数量

at(index): 根据Index索引获取QModelIndexList中的具体项

最后介绍一个QItemSelectionModel常用的槽函数:

对应的信号:

对应的槽:

connect函数:

3. Custom Delegate


首先来看一下代理组件的继承图:

所以如果要使用代理组件必须要继承QItemDelegate或QStyledItemDelegate中的一个,并重写其中的4个方法

QItemDelegate与QStyledItemDelegate的区别在哪?

功能都差不多,只不过QStyledItemDelegate使用的是当前样式来绘制组件,一般推荐使用QStyledItemDelegate

来给一个例子:

如上就是一个代理组件类,其继承了QItemDelegate

并重写了createEditor, setEditorData, setModelData, updateEditorGeometry这4个方法。

下面解释下这4个方法各有什么用处, 我总结了如下图:

 

 

这里是基于ComboBox组合框创造的代理组件。默认情况下视图组件中的基本单元一般都是QLineEdit,但是如果这种情况不适合了通过代理组件改变默认的基本单元。

来看下如何使用代理组件:

这里通过在构造函数中调用setItemDelegateForColumn方法来设置对应的代理组件。

(完)

 

标签:11,Qt,QStandardItemModel,笔记,获取,数据模型,组件,对应,QItemSelectionModel
来源: https://blog.csdn.net/qq_37232329/article/details/111997695