bma*_*ahf 3 qt qtreeview qabstracttablemodel qt5
我有需要在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);
Run Code Online (Sandbox Code Playgroud)
然后查看不挂起。