目录
原文链接:Qt高仿Excel表格组件-支持冻结列、冻结行、内容自适应和合并单元格
一、概述
最近看到一个比较炫酷的表格效果,冻结表格列功能。经常使用excel的人应该都使用过这个功能,当我们想把一些重要的信息一直固定在界面上时,就得使用冻结行或者冻结列的功能。
之前我也做过类似的冻结列的功能,而且Qt的源码中也有类似的demo。
对Qt比较熟悉的人应该都知道,Qt的安装包里可以为我们安装很多的Qt使用事例,都非常不错,很值得学习。我个人也是经常会去学习其中的东西,建议大家没事也多看看。
Qt自带的有一个事例程序,工程名字就做frozencolumn,这个功能就演示了怎么去实现冻结列的功能,思路非常不错。于是,我也借鉴这个想法,做了好几个复杂控件,都是使用这个思路来实现的效果,后续陆续放出
像标题说的那样,本篇文章我们不仅仅是实现冻结列的功能,除此之外,冻结行、内容自适应行高,单元格合并这些我们都要需要完成。
二、效果展示
下面这张图展示了冻结行、冻结列效果。gif图有点儿长,可以花点儿时间看完,确认是自己想要的效果,再继续往下看。
![o_excel_table.gif](https://www.cnblogs.com/images/cnblogs_com/swarmbees/1458965/o_excel_table.gif)
三、实现思路
1、冻结行、冻结列
Qt中的demofrozencolumn
是怎么干的
既然Qt中已经帮我们是想了冻结列的功能,那么久先来分析下这个demo吧。
实现列冻结,也就是说在拖动水平滚动条的时候,第一列永远显示在窗口上。 怎么做到这个效果呢?Qt给的解决办法很简单,我们只需要把两个视图叠加在一起,上层这个视图只显示第一列,下层的视图是全显示,然后拖动的时候我们只需要正常拖动下层的这个视图即可。
是不是很简单呢。Qt封装的控件,接口都很齐全,我们只需要使用connect把相关的变化绑定起来即可。
setModel(model);
frozenTableView = new