• 5933阅读
  • 7回复

[提问]仿照VS - class view的疑虑(已解决) [复制链接]

上一主题 下一主题
离线liuxu_lx7
 
只看楼主 倒序阅读 楼主  发表于: 2011-06-22
我想做一个类似VS中的class view 视图。

功能 :列出所有item信息, 可以对item进行过滤式查找。并支持随时向QTreeView中加入(或删除)item。
问题: 添加或删除item时,整体刷新一次QTreeView的model, 这样的做法是否正确?(不这样做就得计算插入item的位置, 因为有过滤功能, 这个计算会麻烦些)。

考虑效率的问题, 不应该采用每次改变QTreeView内容就刷新整个。又犹豫"计算插入位置"也未必高效(毕竟存在查找与对比),再加上此方法要求维护更多代码。

有朋友可以给点意见么?通常这种情况,应该怎样处理呢?

离线liuxu_lx7
只看该作者 1楼 发表于: 2011-06-22
没有朋友能给点意见嚒?
离线liuxu_lx7
只看该作者 2楼 发表于: 2011-06-23
Qt的助手是采用上述的第一种方案。OK,我也这样用好了。
离线zzjin

只看该作者 3楼 发表于: 2011-06-23
在AQP里面有用到增删tree的时候禁用一些功能,比如默认的cache和sort功能来提升效率.在大量的数据变动玩了之后再最后进行一次运算就行.这样效率比较高= =
离线liuxu_lx7
只看该作者 4楼 发表于: 2011-06-24
回 3楼(zzjin) 的帖子
感谢。

sort 我已经禁掉了。cache 我看下。

现在还有个问题:
不用QStandardItemModel的添加删除QStandardItem函数,改用QStandardItemModel::setItem设置QStandardItem效率会高。
但是这个函数在输入新的QStandardItem时,会导致删除原有的QStandardItem(无法跟踪,但确实能看到指针指向的空间被析构了)。这样,我每次刷新QTreeView->model()都不得不重新new QStandardItem。也是不小的消耗。
离线zzjin

只看该作者 5楼 发表于: 2011-06-24
回 4楼(liuxu_lx7) 的帖子
这个可能就似乎得你自己测试下采用这种方式带来的new消耗值不值得了= =....
离线liuxu_lx7
只看该作者 6楼 发表于: 2011-06-24
回 5楼(zzjin) 的帖子
我测过了,十万个new+delete QStandardItem 需要近450毫秒。setItem和setRowCount 近500毫秒。加起来1秒钟了。不小了。
离线liuxu_lx7
只看该作者 7楼 发表于: 2011-06-26
发现QAbstractItemView::setRowHidden可以被利用。
1,减少了new/delete QStandardItem
2,只隐藏各个 root QStandardItem 便达到隐藏child QStandardItem 目地,操作数骤减。(如果执行delete,势必真正调用到每个child QStandardItem删除,操作数大)

测试:
十万个QStandardItem 不区别父子, 全部执行setRowHidden,耗时:750毫秒
若一万个QStandardItem(不关心有多少子QStandardItem), 执行setRowHidden,耗时:79毫秒。
快速回复
限100 字节
 
上一个 下一个