Jul*_*pez 4 c++ model-view-controller qt qsortfilterproxymodel
我有一个自定义模型,当某些单元格的值发生更改时,它会不时发出 dataChanged() 信号。这本身就很有效,并且视图会根据需要进行更新。
但后来我尝试在中间插入一个 QSortFilterProxyModel 以允许在我的视图上进行排序(不需要过滤),显然 dataChanged() 信号不是通过代理模型中继的。
据我所知,这是 QSortFilterProxyModel 的预期行为,除了子类化 QSortFilterProxyModel 之外,还有其他解决方案吗?只是添加一个槽来中继 dataChanged() 信号并相应地映射项目?
就我而言,它非常简单,因为一次仅更新一个单元格或整个列,但没有其他奇怪的东西,因此映射索引应该非常简单......
QSortFilterProxyModel 应该像普通模型一样发出dataChanged()信号,因此视图将得到更新。我们可以在 Qt 的源代码(qsortfilterproxymodel.cpp)中看到 QSortFilterProxyModel::setSourceModel 将处理程序附加到源模型的dataChanged()信号。如果一切顺利,处理程序将完成其工作并发出 QSortFilterProxyModel 的dataChanged()信号。请注意,它有许多检查可以防止信号发出。
如果没有发生这种情况,请确保您的自定义模型正确实现,否则 QSortFilterProxyModel 逻辑可能会抑制该信号。例如,当我遇到同样的问题时,结果发现我的QAbstractItemModel::parent方法的实现是错误的。
在最坏的情况下,您可以尝试自己编译 Qt 并进行一些调试来查找原因。