怎样让Qt的tree控件显示更快?

发布于 2022-09-07 08:47:47 字数 1004 浏览 26 评论 0

我的工程需要显示大量的数据在qt的tree控件上,一共4列,第一列是按钮和文本,第二列是文本,第三列是combobox,第四列是icon。如果全部插入的话,会花费大量的时间,所以我决定只显示tree窗口部分的items,其他的不显示,通过响应鼠标滚轮事件,结合滚动条的位置来动态刷新显示区域的数据,以减少时间和内存的开销。

但是我用了3种方式实现上述功能,都遇到了同一个问题,速度太慢,三种办法刷新tree窗口内的数据(13行),都需要将近1秒时间,这对于滚动条滚动过程来说,速度难以接受,所以想问一下大家,有没有更快速的办法。

我使用了treewidget、treeview、treeview+代理 三种办法

treewidget:

我使用了setItemWidget实现的将按钮+文本 和 combobox 显示到treewidget上的。结果也发现,13行循环下来,setItemWidget这个函数总体时间花费较大。

treeview:

类似上一条,我使用了setIndexWidget,速度并没有明显改善。

treeview + 代理:

代理combobox,使用setItemDelegateForColumn函数将第三列设置代理,并且使用openPersistentEditor使代理起作用(否则combobox不显示)。这种方法快了一些,但还是相差较大,而且openPersistentEditor消耗的时间也较多。

综合来说,

treewidget:setItemWidget消耗时间大

treeview: setIndexWidget消耗时间大

treeview+delegate:openPersistentEditor消耗时间大

最近弄这个弄得头大,qt老手们,这个改怎么搞。

另:

附上这三个的简单实现,希望各位看一看指导我一下。
https://github.com/liu-wan001...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文