由于最近在项目中需要加载几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

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

被折叠的 条评论
为什么被折叠?



