Qt GUI图形图像开发之图形图像开发之QT表格控件表格控件QTableView,QTableWidget复杂表头复杂表头(多行表头多行表头)
及冻结、固定特定的行的详细方法与实例及冻结、固定特定的行的详细方法与实例
主要介绍了Qt GUI图形图像开发之QT表格控件QTableView,QTableWidget复杂表头(多行表头) 及冻结、固定特定的行的详细方法与实例,需要的朋友可
以参考下
我们在开发过程中对于表格使用频率还是挺高的,使用QT框架开发时候我们使用QTableView或者QTableWidget创建表格。
其中表格分为 表格头与表格体:
对于简单地表格,我们可以设置表头来满足我们的要求(当然也可以隐藏表头),不过对于定制化的表头,我们能做的不是特别多。特别是对于复杂的表头,使用自带的
表头,无论怎么设置都不太可能达到需求。例如我最近接到的一个项目,需求是:
我们分析一下这个表格有什么特点:
1.表头不是简单的一行,而是两行。
2.表头有单元格的合并。
3.部分表头中间有使用渐变的分隔线且分割线不是上下充满表格的。
如果能解决上面三个问题,我们基本都可以把这个表格做出来了。这个表头明显是一个比较复杂的表头。对于只对QT提供的API或者CSS上面三个问题,没有一个能够解
决的。
这时候可能会有老师提出解决办法:给header 设置itemDelegate,自己在itemDelegate中重写paintEvent,自己画表头。 因为我们都知道,自己画单元格,要更灵活,满
足更多需求。但是我们平时都是对单元格进行重绘,并不是对header的单元格进行重绘。于是就去搜索QT的帮助文档,惊喜的发现居然有设置itemdelegate的API,心里
觉得有戏于是创建 ItemDelegate类,对header进行设置如下
tableWidget->horizontalHorizon()->setItemDelegate(new ItemDelegate());
可是结果却是令人失望的,没有一点效果。于是反身去查找QT 关于这部分的介绍,终于找到了原因:
结果就显而易见了,对于headerView,并不能使用ItemDelegate进行重绘。
那么我们就要另外想办法了,经过分析,刚开始提出了两种方案:
解决方案
描述 优点 缺点
方
案
一
隐藏表头
前两行当做表头
内容行从第三行开始
对表格设置itemDelegate,对前两行的表头进行重绘
一个QTableWidget,
实现起来方便一些。
当出现滚动条,表头会随着着内容表格个移动,不符合大
众习惯。
改变了内容表格的整个原有序列,所有的行数都需要比原
来大2,对所有的API进行重写工作难不高,复杂度比较
高。
评论1