QSortFilterProxyModel 没有中继 dataChanged 信号

Jul*_*pez 4 c++ model-view-controller qt qsortfilterproxymodel

我有一个自定义模型,当某些单元格的值发生更改时,它会不时发出 dataChanged() 信号。这本身就很有效,并且视图会根据需要进行更新。

但后来我尝试在中间插入一个 QSortFilterProxyModel 以允许在我的视图上进行排序(不需要过滤),显然 dataChanged() 信号不是通过代理模型中继的。

据我所知,这是 QSortFilterProxyModel 的预期行为,除了子类化 QSortFilterProxyModel 之外,还有其他解决方案吗?只是添加一个槽来中继 dataChanged() 信号并相应地映射项目?

就我而言,它非常简单,因为一次仅更新一个单元格或整个列,但没有其他奇怪的东西,因此映射索引应该非常简单......

v.s*_*nko 5

QSortFilterProxyModel 应该像普通模型一样发出dataChanged()信号,因此视图将得到更新。我们可以在 Qt 的源代码(qsortfilterproxymodel.cpp)中看到 QSortFilterProxyModel::setSourceModel 将处理程序附加到源模型的dataChanged()信号。如果一切顺利,处理程序将完成其工作并发出 QSortFilterProxyModel 的dataChanged()信号。请注意,它有许多检查可以防止信号发出。

如果没有发生这种情况,请确保您的自定义模型正确实现,否则 QSortFilterProxyModel 逻辑可能会抑制该信号。例如,当我遇到同样的问题时,结果发现我的QAbstractItemModel::parent方法的实现是错误的。

在最坏的情况下,您可以尝试自己编译 Qt 并进行一些调试来查找原因。