QTableWidget加载大文件数据

文章介绍了一种在QTableWidget中高效显示大量数据的方法,通过监听滚动条变化只加载可视区域的数据,避免一次性加载造成卡顿。作者对比了分页显示和自定义滚动条的效果,最终选择了实时刷新可见行的策略。同时,讨论了大文件的多线程读取和延迟加载等优化方案。

由于最近在项目中需要加载几GB的文件,并且需要在QTableWidget中进行显示;粗略估计可能得有几千万行,如果使用常规的方法,直接在QTableWidget中进行全部显示,会比较卡。所以查找相关资料,最终想到了一个比较巧妙的实现方法。

基本思路是:QTablewidget中每一次可见的行数基本上只有几十行,即便全屏显示,最多也就100行(应该远远达不到),而电脑的性能刷新100行的数据基本上也是毫秒级别的(没有实测),所以,只需要每一次QTableWidget的滚动条变化时,重新把可见的数据填充进去就可。

代码实现:

1、创建CacheTableWidget类,管理QTableWidget和自定义的QScrollBar对象,目的是要实现上述功能,需要隐藏QTableWidget自身的滚动条,利用自己创建的QScrollBar对象实现QTableWidget的滚动效果。

 

 m_tw:填充数据的QTableWidget

m_vBar:模拟QTableWidget的滚动条

m_viewRow:每次视图刷新时,QTableWidget可以显示的行数

verticalValueChanged:自定义滚动条变化时,通知上层更新表格数据

 此处隐藏掉QTableWidget的滚动条,并设置样式,主要目的是为了让自定义的滚动条看起来像QTableWidget原生的效果;

另外:QTableWidget的监听事件,必须监听QTableWidget的viewport视图,否则无法捕获QTableWid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值