我有需要在 QTreeView 中显示的自定义数据。我从 QAbstractTableModel 派生了我的模型,并自己实现了 rowCount()、columnCount()、data() 和 headerData()。该模型有一个本地 QList> 来支持它,并且定义了 data() 函数以从与 QModelIndex 参数中接收的行和列直接对应的列表列表中读取值。我遇到了两个问题。
首先是一个非常大的文件的加载速度非常慢,这是可以理解的。第二个是滚动动作非常缓慢,我不是很理解。事实证明,如果我拉下滚动手柄,GUI 会挂起大约 20 秒,然后弹回来。如果我将手柄拉下更远的距离,则挂起时间会相应增加。如果我将手柄一直拉到滚动条的底部,在等待应用程序再次响应后,我可以上下拉动手柄并获得更好的响应。
在我看来,QTreeView 只要求一小部分可用数据,但是当我将滚动句柄一直拉到滚动条的底部时,一旦应用程序再次响应,到那时它已经读取所有的数据。
有没有办法通过滚动大数据来获得响应更快的体验?我不介意预先等待更长的时间,所以像强制视图预先从模型中读取所有数据这样的事情就可以了。
我还认为我可以回到仅从 QAbstractItemView 派生并控制它如何请求和存储数据的方式,只允许存储查看的数据,以及查看数据之前和之后的条目缓冲区。这当然意味着我必须控制滚动条,因为句柄大小会指示少量数据,我希望它能够像用户一样查看他们正在处理的数据大小。如果我不需要的话,我真的不想去那里。