使用QTableWidget加载大量数据的个人感悟

最近原来项目中使用了QTableWidget来加载20万条的数据量。

它的实现方式是:首先查询数据库获取所有数据的ID列表,垂直滚动条长度则表示实际的数据量,每次只加载显示可见区域的数据,比如20条数据, 当滚动条滚动时,则重新查询数据加载新的20条数据,原来的20条数据则会被删除,也就是当前列表永远只展示20条数据。

这样实现的好处是,即使数据库中有很多数据,也不会有卡顿的现象。

但是它也有很多的弊端,它只能适用不复杂的场景,比如单选模式,对于要支持ctrl、shift、鼠标左键按下滑动选择的功能,由于当前列表只加载20条数据,Qt内置的功能只能操作这20条数据,所以需要自定义实现,如果实现不好,必然会带来很多的问题。实际上项目也确实带来了不少问题,而且也不好维护。

为此,考虑了几套解决方案,它们都有各自的优缺点。

方案一、使用QSqlTableModel来显示数据,并且一次性加载所有的数据,它的优点是能够使用Qt内置所有功能,无需自定义实现,它的缺点是加载超过20万数据的时候会有明显卡顿现象。

方案二、程序启动的时候,先预先加载一部分数据,比如1000条数据,但是随着滚动条拖动快到1000条数据的时候,则需要再加载1000条数据,并且前面已加载的数据不好销毁,这样不断的滚动,直到所有的数据都加载完成。它的优点是同样能够使用Qt内置所有功能,并且加载超过20万数据的时候也不会有卡顿现象,它的缺点是当滚动条拖动到最后的时候,会出现往上弹的现象。

方案三、列表分页显示,但是这个需要依据需求而定。

综上所述,使用QT进行界面开发的时候,尽量采用Qt支持的功能,因为自定义实现并不能做到很完善,相反,它会带来很多问题以及加大后期维护的成本。

以上三个方案个人认为不少很好,希望有高手可以提供更好的解决方案。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。