Qt TreeView中的排序问题和改变选中的item后更新出错的问题

今天测试Qt程序的时候碰到了2个小问题:

1. 如何在TreeView中进行排序。

标准做法当然是使用QSortFilterProxyModel,起先我自定义的Model类是从QAbstractProxyModel派生出来的,做了一些定制的修改,当我想排序的时候,我把基类改成QSortFilterProxyModel,发现有好些不兼容的地方。把我自定义的Proxy Model的函数全部屏蔽掉以后一切正常,因此,如果你需要自定义的Proxy Model,从QSortFilterProxyModel派生吧,让你一开始就能避免很多潜在问题。后面我还得看看我的哪些函数出了错误。

另外,View缺省是不排序的,要让你可以在点击某个column的header时进行排序,需要设置sortingEnabled这个属性。

 

2.改变选中的item后,只有我focus的那一列对选中状态有更新,对于未涉及到的column,需要刷新或者通过其他方式重绘的时候才能更新。

因为我做了好几处地方的修改,有派生的View,有派生的Model,还有Proxy Model,因此一时之间也不知道到底是哪里出了错,修改过下面几个地方:

- Model insert column的时候通知proxy model,proxy model将此事件通知view,我原先以为view不知道我column的信息。

- 设置了新的proxy model后调用reset,以为这样column的信息会被刷新。我以为view缺省认为我的proxy model只有一个column。

- 修改allColumnsShowFocus,这样确实可以解决一个column更新的问题,但是当你一次选中多行(row)的时候,问题依然存在。

- 还做了一些其他地方的修改,我自己都不记得有哪些了。

其实问题在于,我派生的QTreeView并重载了selectionChanged方法,结果我当时写这个方法的时候只是为了测试一下是不是会被调用,留着看看后面有没有地方需要被用到,结果忘记调用基类的方法QTreeView::selectionChanged。

 

哎,真是破费周折啊!看来,不管是写公司的code,还是自己处于学习的目的写一些code,都要一样的严谨、写一段code就把一段code理解清楚。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值