首页 > 其他分享 >Qt之QTableView

Qt之QTableView

时间:2022-12-29 22:44:50浏览次数:63  
标签:Qt 表格 样式 QTableWidget 部件 QTableView

前言

在目前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的区别
  • 效果预览
    目录

  • 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

    标签:Qt,表格,样式,QTableWidget,部件,QTableView
    From: https://www.cnblogs.com/shHome/p/17003438.html

    相关文章

    • Qt学习笔记(一) 关于QWidget类的paintEvent方法
        今天要讨论的也算是QT的核心之一了,那就是如何对widget进行重绘,这里就是可以看到,继承了QWidget的子类,自己重新写一个paintEvent函数就可以了。这个paintEvent就相当......
    • vlc qt player 播放器开发实例
      (一)VLC-Qt下载官网地址:https://vlc-qt.tano.si/Github地址:https://github.com/vlc-qt示例地址:https://github.com/vlc-qt/examples我的QT开发环境是MinGW,所以下载......
    • 基于Qt的桌面客户端组件化框架DT 开源啦
      这个是本人在工作中基于QT开发的组件化桌面开发框架,目前打算开源出来提供给大家,节省大家的开发时间和效率,希望对大家的开发有所帮助,也欢迎提出意见和改进建议1.为什么开源D......
    • qt读取txt文件内容
      QFilef("D:\\测试数据\\单波束数据\\灯浮.TGT"); if(!f.open(QIODevice::ReadOnly|QIODevice::Text))//打开指定文件 { QMessageBox::about(NULL,"文件","文件打......
    • Alan Ezust-C++设计模式(基于Qt)-UMLChina讲座-音频和幻灯
      时间2008年7月15日(周二)上午10:00-12:00演讲人AlanEzust。《C++设计模式--基于Qt4开源跨平台开发框架》作者,曾在McGill大学、Suffolk大学以及Leamix、Nertel、Objectivity、......
    • Qt大型工程开发技术选型PartFinal:CLR调用COM组件
      Qt大型工程开发技术选型PartFinal:CLR调用COM组件这里其实没什么内容了,直接上代码吧,如下文所示:#pragmaonce#using<mscorlib.dll>usingnamespaceMain_Activerserver......
    • QT画机器人
      #include<QtWidgets>#include"robot.h"RobotPart::RobotPart(QGraphicsItem*parent):QGraphicsObject(parent),color(Qt::lightGray),dragOver(false){setAcc......
    • QT 结构体字节对界问题
      QT默认是4字节对界,所以程序中使用sizeof()时会出现问题,看采用如下方法:/字节对齐,否则共用体那里指针处理时有问题#pragmapack(push)//保存对齐#pragmapack(1)//设定......
    • QT编译报错,LNK2001:无法解析的外部符号
      今天按照以前写过的文件依葫芦画瓢新建了一个类,结果报了3行LNK2001的错误,如下图:QT比较恶心的一个地方就是这种错误不能直接看出来是哪出的问题,而且双击也跳......
    • Linux 下搭建 Qt 环境
      很多时候由于跨平台的需要,我们要在各个平台上安装Qt并进行应用程序的开发,而环境的搭建尤为重要,因为这是程序开发的前提,属于非常关键的一环。由于Linux 各个发行版的安......