最近我从Qt 5.3.0升级到Qt 5.3.1并注意到当我对代理模型进行排序时,使用QSortFilterProxyModel作为模型的TableView不再更新。
您可以使用示例代码here来查看此操作!
如果使用Qt 5.3.0编译它,表将进行排序,但如果使用Qt 5.3.1进行编译,模型将进行排序(使用qDebug语句进行验证),但TableView不会更新。这种情况发生在Windows和Linux上。
为了解决这个问题,我在调用this-> sort()之后不得不添加emit layoutChanged()。
我的问题是有其他人注意到这一点,并发现这是设计还是缺陷。
谢谢
答案 0 :(得分:3)
我做了一点挖掘,我发现了一个Qt错误,确切地说是这个问题。 QTBUG-40035 TableView, Sort doesn't work
在Qt 5.3.1中,另一个错误被解决了QTBUG-37983,它改变了QQMLDelegateModel以发出layoutChanged(QList,QAbstractItemModel :: LayoutChangedHint),而不是简单地发出layoutChanged()。 TableView似乎没有收听layoutChanged()信号的参数化版本,这就是为什么我可以通过在调用sort()后手动发出layoutChanged()来解决这个问题。
QT 5.3.2中的QTBUG-39492显然已经解决了这个问题。