Qt 5.3.1 TableView 未更新

Posted

技术标签:

【中文标题】Qt 5.3.1 TableView 未更新【英文标题】:Qt 5.3.1 TableView not updating 【发布时间】:2014-08-13 13:33:22 【问题描述】:

最近我从 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()。

我的问题是有没有其他人注意到这一点并发现这是设计使然还是缺陷。

谢谢

【问题讨论】:

【参考方案1】:

我做了更多的挖掘工作,发现了一个针对这个问题的 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 修复

【讨论】:

以上是关于Qt 5.3.1 TableView 未更新的主要内容,如果未能解决你的问题,请参考以下文章

Qt5 - 在 QML TableView 中显示动态数据模型

Swift 2:从单独的标签栏控制器更新 TableView

Swift 3 和 Firebase - Tableview 未更新

部分中的行计数未在 TableView 中更新

可水平滚动的 TableView 的右列未完全显示

.ui 文件未更新的 Qt 和 MSVC 问题