前言

在目前PC端的桌面程序中,界面框架主要流行的基本上还是那几个,就本人而言,平时用的还是Qt框架多一些。这里我使用Qt的表格部件作为样本记录学习笔记。
语言或者框架永远不是限制,主要是理解其设计思想或者实现方式!!!
!!!该篇笔记以QTableWidget为例进行说明!!!

概述

在Qt中的表格部件由QTableWidgetQTableView实现,考虑到有些同志有API文档阅读困难症,我在后面会贴上一个自定义表格的示例单元项目。
在这之前,我们应该清楚的知道表格是由那些单元(最小子部件)组成,详情请参见下表内容:

类名 描述
QHeaderView 表格的表头部件,直接继承自QAbstractItemView, 但我们关注的是它继承自 QWidget
QSqlTableModel 表格的数据库数据模型,直接继承自QSqlQueryModel, 但我们关注的是它继承自 QAbstractItemModel
QStandardItemModel 表格的标准数据模型,直接继承自QAbstractItemModel
QScrollArea 表格的数据渲染区域(工作区),直接继承自QWidget
QStandardItem 表格的单元格渲染部件,是一个纯数据结构体的存在,不接入Qt框架中

然后我们整理一下这些类在这个功能模块中的合作关系:

在这里我们将表格功能模块按照MVC的设计模式来理解。因为Qt在这个功能模块中使用的就是这种模式而实现的。
M: 模型,QAbstractItemModel 的实例化类对象,负责数据的处理,如数据库数据更新或者删除时对数据的处理单元。
V: 视图,QHeaderView 或者 QTableWidget 实例对象,负责渲染数据模型的数据到界面。同时承担与用户交互的角色。
C: 控制器,我的理解是Qt的信号和槽机制(元对象系统)承担控制器的角色,但这里是直发,其内部可能会做出一些提高用户体验的优化。

Qt之表格功能模型示意图
Qt之表格功能模型示意图

那么现在我们已经很清晰的知晓表格模型的基本角色,我将在后面对这些角色进行自定义样式的实现。

参考链接

  • Qt-GUI##官网文档
  • gossiplee##QTableWidget与QTableView的区别
  • 效果预览

    Qt之QTableWidget静态效果演示
    Qt之QTableWidget静态效果演示

    Qt之QTableWidget动态效果演示
    Qt之QTableWidget动态演示

    目录

  • QTableView和QTableWidget的区别

  • QTableWidget的组成

  • QTableWidget的样式

  • 总结&下载
  • QTableView和QTableWidget的区别

    理论上来讲的话,我们用QTableView已经实现的功能,在QTableWidget中也能达到同样的效果,因为QTableWidget它是继承自[public] QTableView,接口都是通用的。
    QTableWidget封装了非常完善的事件反应接口,但本质是同QTableView一致,只不过QTableWidget生产了一些扩展的代码,但这些代码是必须的。

    QTableWidget的组成

    表格部件的布局主要是有表头区域和数据渲染区域组成,表头作为导航的功能和作用,数据渲染区域是后台数据的渲染容器,提供界面渲染和与用户交互的作用。

    如果我们需要自定义表头或者数据渲染容器样式,那么我只需要设置表头部件或者数据渲染容器的QSS风格即可,如果这还满足不了你的需求时,你应该考虑自己扩展一个表格功能类了。

    Qt之表格布局示意图
    Qt之表格布局示意图
    QTableWidget的样式

    QTableWidget的样式基本是可以完全参考自QWidgetQSS样式,但表格部件本身是有私人定制的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的所有部件都是遵循了一定的规则,我们知道这些规则后,基本上不需要对具体的部件要有很透彻的理解就能实现出我们想要的效果,只有在目标部件是一个特殊的存在时,我们才会需要对其进行单独的学习或理解,就本人而言,暂时没有遇到过超纲的需求!

    示例项目下载地址:Qt/Widgets/sample_qtablewidget

    posted on 2022-12-29 22:38  怪小子  阅读(467)  评论(0编辑  收藏  举报