gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:16:24 25 4
gpt4 key购买 nike

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

首先是非常大的文件的加载相当慢,这是可以理解的。第二个是滚动 Action 非常慢,我不太理解。事实证明,如果我向下拉滚动 handle ,GUI 会挂起大约 20 秒,然后弹出。如果我将 handle 拉得更远,悬挂时间就会相应增加。如果我将 handle 一直拉到滚动条的底部,等待应用程序再次响应后,我可以上下拉 handle 并获得更好的响应。

在我看来,QTreeView只要求一小部分可用数据,但是当我将滚动 handle 一直拉到滚动条的底部时,一旦应用程序再次响应,它就会通过该点读取所有数据。

有没有一种方法可以通过滚动大数据来获得响应更快的体验?我不介意提前等待更长的时间,所以只需强制 View 预先从模型中读取所有数据就可以了。

我还认为我可以回到从 QAbstractItemView 派生并控制它请求和存储数据的方式,只允许存储查看的数据,以及查看数据之前和之后的条目缓冲区。这当然意味着我必须控制滚动条,因为句柄大小将指示少量数据,并且我希望它向用户显示他们正在处理的数据大小。如果不是必要的话我真的不想去那里。

最佳答案

有两件事:

  • 重新实现 <a href="http://doc.qt.io/qt-5/qabstractitemmodel.html#fetchMore" rel="noreferrer noopener nofollow">fetchMore()</a><a href="http://doc.qt.io/qt-5/qabstractitemmodel.html#canFetchMore" rel="noreferrer noopener nofollow">canFetchMore()</a>在你的模型中。请参阅this implementation example 。基本上,这两个函数允许对数据进行延迟初始化,并且应该阻止 ui 卡住。
  • 替换您对 reset() 的使用和dataChanged()使用插入和删除功能。现在,您正在强制 View 重新计算要显示 100,000 个项目中的哪一个。

关于Qt5 QTreeView 具有自定义模型和大数据滚动速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29798646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com