Qt Model/View 学习(5) - QTableView(优雅)使用教程(附源码)

Qt编程:优雅使用QTableView实现动态表格
本文深入探讨了如何优雅地使用QTableView,指出使用QStandardItemModel和QStandardItem可能不够理想,并建议直接利用QTableView结合自定义QAbstractTableModel实现动态表格。文章详细介绍了数据结构设计、核心代码实现,包括如何添加、删除行,以及处理表头和数据的显示与编辑。此外,还展示了如何隐藏滚动条和调整表格尺寸。通过实例代码展示了如何响应数据变化以自适应列宽。


0. 前言

上一篇文章中介绍了如何从QAbstractItemModel派生出自己的Model类,实现在QTableView上的数据显示和编辑功能。其中涉及到了一部分关于QTableView的操作没有细说,本文就来趁热打铁讲一讲QTableView的使用方法。

本文的标题中有(优雅)的字眼,是由于在学完官方文档后,还没写本文之前先查了一下现有的博客对于QTableView的介绍,发现大部分的教程都在使用QStandardItemModel以及QStandardItem来与QTableView联动,个人认为这种做法并不优雅(小声bb 👻)。

我们在这篇文章中,讲到有关的Model类时提到了QStandardItemModel,它提供了一种使用控件的Model类,所用到的QStandardItem类就是它支持的控件。它Model了,但没完全Model。这样一来为何不直接使用基于控件的QTableWidget

笔者认为,QTableView已经是封装完备的一个类了,如果使用Model/View框架,除了极少数特殊需求场合,基本不需要从QTableView派生自己的View

另外,本文虽介绍QTableView,但更关键的代码或许还是在Model类这边。

如果想直接看源码的话,可以跳转到此处


系列文章回顾
Qt Model/View 学习(1) - 是什么和为什么?
Qt Model/View 学习(2) - QModelIndex索引模型数据
Qt Model/View 学习(3) - 索引来一堆东西,究竟取谁(ItemDataRole)?
Qt Model/View 学习(4) - 实现自己的QAbstractTableModel类(支持显示与修改)


1. View家族

先来一张UML类图,看看QTableView的家族渊源:
在这里插入图片描述
图中的三角形表示泛化关系,指向基类。更多关于UML类图的知识可以看这篇文章

Model类相似地,View类的C位也是一个Abstract类:QAbstractItemView。它继承了QAbstractScrollArea表明它支持滚动条

它派生出来一系列的类,而本文主角QTableView则为其中之一,且QTableView中还包含了QHeaderView,这是表格的横纵标题栏对象。所以上一篇文章中后面想要实现的效果——隐藏标题栏和滚动条——思路都变得很清晰:可以找到对应的对象然后使用hide()隐藏,或者查找对应对象的隐藏函数接口

从图中也可以看到,各种

评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值