我有一个自定义模型,当一些单元格的值发生变化时,它会不时地附加发出dataChanged()信号。这本身工作得很好,视图会根据需要进行更新。
但是后来我尝试在中间插入一个QSortFilterProxyModel,以允许对我的视图进行排序(不需要过滤),显然dataChanged()信号不是通过代理模型传递的。
据我所知,这是QSortFilterProxyModel的预期行为,除了QSortFilterProxyModel的子类化之外,还有什么解决方案,只需添加一个插槽来中继dataChanged()信号并相应地映射项?
在我的例子中,它非常简单,因为一次只更新一个单元格,或者一整列,但没有其他奇怪的东西,所以映射索引应该非常简单……
发布于 2016-04-30 00:17:34
QSortFilterProxyModel应该像普通模型一样发出dataChanged()信号,因此视图将得到更新。我们可以在Qt的源代码(qsortfilterproxymodel.cpp)中看到,QSortFilterProxyModel::setSourceModel将一个处理程序附加到源模型的dataChanged()信号。处理程序完成它的工作并发出QSortFilterProxyModel的dataChanged()信号。请注意,它有许多可以防止信号发出的检查。
如果没有发生这种情况,请确保正确实现了您的自定义模型,否则QSortFilterProxyModel逻辑会抑制该信号。例如,当我遇到同样的问题时,事实证明我的QAbstractItemModel::parent方法的实现是错误的。
在最坏的情况下,你可以尝试自己编译Qt,并做一些调试来找出原因。
发布于 2013-12-04 17:49:50
您可以在不通过QMetoObject::invokeMethod继承的情况下从QSortFilterProxyModel调用信号别忘了检查助手函数: mapFromSource mapToSource
https://stackoverflow.com/questions/20371047
复制相似问题