前言
在目前PC端的桌面程序中,界面框架主要流行的基本上还是那几个,就本人而言,平时用的还是Qt
框架多一些。这里我使用Qt
的表格部件作为样本记录学习笔记。
语言或者框架永远不是限制,主要是理解其设计思想或者实现方式!!!
!!!该篇笔记以QTableWidget
为例进行说明!!!
概述
在Qt中的表格部件由QTableWidget
、QTableView
实现,考虑到有些同志有API
文档阅读困难症,我在后面会贴上一个自定义表格的示例单元项目。
在这之前,我们应该清楚的知道表格是由那些单元(最小子部件)组成,详情请参见下表内容:
类名 | 描述 |
---|---|
QHeaderView |
表格的表头部件,直接继承自QAbstractItemView , 但我们关注的是它继承自 QWidget |
QSqlTableModel |
表格的数据库数据模型,直接继承自QSqlQueryModel , 但我们关注的是它继承自 QAbstractItemModel |
QStandardItemModel |
表格的标准数据模型,直接继承自QAbstractItemModel |
QScrollArea |
表格的数据渲染区域(工作区),直接继承自QWidget |
QStandardItem |
表格的单元格渲染部件,是一个纯数据结构体的存在,不接入Qt 框架中 |
然后我们整理一下这些类在这个功能模块中的合作关系:
在这里我们将表格功能模块按照MVC的设计模式来理解。因为Qt
在这个功能模块中使用的就是这种模式而实现的。
M
: 模型,QAbstractItemModel
的实例化类对象,负责数据的处理,如数据库数据更新或者删除时对数据的处理单元。
V
: 视图,QHeaderView
或者 QTableWidget
实例对象,负责渲染数据模型的数据到界面。同时承担与用户交互的角色。
C
: 控制器,我的理解是Qt
的信号和槽机制(元对象系统)承担控制器的角色,但这里是直发,其内部可能会做出一些提高用户体验的优化。
那么现在我们已经很清晰的知晓表格模型的基本角色,我将在后面对这些角色进行自定义样式的实现。
参考链接
效果预览
Qt之QTableWidget静态效果演示
Qt之QTableWidget动态效果演示
目录
QTableView和QTableWidget的区别
理论上来讲的话,我们用QTableView
已经实现的功能,在QTableWidget
中也能达到同样的效果,因为QTableWidget
它是继承自[public] QTableView
,接口都是通用的。
QTableWidget
封装了非常完善的事件反应接口,但本质是同QTableView
一致,只不过QTableWidget
生产了一些扩展的代码,但这些代码是必须的。
QTableWidget的组成
表格部件的布局主要是有表头区域和数据渲染区域组成,表头作为导航的功能和作用,数据渲染区域是后台数据的渲染容器,提供界面渲染和与用户交互的作用。
如果我们需要自定义表头或者数据渲染容器样式,那么我只需要设置表头部件或者数据渲染容器的QSS风格即可,如果这还满足不了你的需求时,你应该考虑自己扩展一个表格功能类了。
QTableWidget的样式
QTableWidget
的样式基本是可以完全参考自QWidget
的QSS
样式,但表格部件本身是有私人定制的QSS
样式
// 表格部件的样式
QTableWidget
// 单元格样式
QTableWidget::item
// 每个单元格被选中的状态样式
QTableWidget::item::selected
// 垂直滚动条 handle
QScrollBar::handle:vertical
// 垂直滚动条 区域
QScrollBar::vertical
// 垂直滚动条 handle上、下区域(未被handle占用的区域
QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical
// 垂直滚动条 最顶端与最低端的区域
QScollBar::add-line:vertical, QScrollBar::sub-line:vertical
// 标题头的样式;每个单独的标题区域
QHeaderView::section
总结&下载
Qt
的所有部件都是遵循了一定的规则,我们知道这些规则后,基本上不需要对具体的部件要有很透彻的理解就能实现出我们想要的效果,只有在目标部件是一个特殊的存在时,我们才会需要对其进行单独的学习或理解,就本人而言,暂时没有遇到过超纲的需求!