繁体   English   中英

Qt5 QTreeView具有自定义模型和大数据非常慢的滚动

[英]Qt5 QTreeView with custom model and large data very slow scrolling

我有需要在QTreeView中显示的自定义数据。 我从QAbstractTableModel派生了我的模型,并自己实现了rowCount(),columnCount(),data()和headerData()。 模型具有本地QList>以支持它,并且data()函数被定义为从与QModelIndex参数中接收的行和列直接对应的列表列表中读取值。 我遇到了两个问题。

首先是一个非常大的文件的负载很慢,这是可以理解的。 第二个是滚动动作非常缓慢,我并不是真正理解。 事实证明,如果我向下拉动滚动手柄,GUI会挂起大约20秒,然后弹出。 如果我向下拉动手柄更长的距离,则挂起时间会相应增加。 如果我将手柄一直拉到滚动条的底部,等待应用程序再次响应之后,我可以上下拉动手柄并获得更好的响应。

在我看来,QTreeView只需要一小部分可用数据,但当我将滚动手柄一直拉到滚动条的底部时,一旦应用程序再次响应,它就到那时读了所有数据。

有没有办法通过滚动大数据来编写更具响应性的体验? 我不介意在前面等待更长时间,所以只需强制视图从模型中预先读取所有数据就可以了。

我还想过,我可以回到刚刚从QAbstractItemView派生并控制它如何请求和存储数据,只允许存储查看的数据,以及查看数据之前和之后的条目缓冲区。 那当然意味着我必须控制滚动条,因为句柄大小会指示少量数据,我希望它能够看到用户应该处理的数据大小。 如果我不需要,不是真的想去那里。

两件事情:

  • 在模型中重新实现fetchMore()canFetchMore() 请参阅此实现示例 基本上,这两个函数允许延迟初始化数据,并应该停止ui冻结。
  • 替换reset()dataChanged()用法以使用插入和删除功能。 现在,您正在强制视图重新计算要显示的100,000个项目中的哪一个。

采用

treeview view;
view.setUniformRowHeights(true);

然后查看不挂起。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM