ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt学习笔记[11]

2020-12-31 14:34:18  阅读:417  来源: 互联网

标签:11 Qt QStandardItemModel 笔记 获取 数据模型 组件 对应 QItemSelectionModel


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个方法各有什么用处, 我总结了如下图:

 

 

  • createEditor: new出作为编辑器的组件的对象并设置其属性,以供后面使用
  • setEditorData: 从数据模型中获取数据并设置到编辑器(即视图组件)上
  • setModelData: 从视图模型中获取数据并调用数据模型进行数据修改
  • updateEditorGeometry: 给组件设置一个合适的大小值

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

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

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

(完)

 

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有