QSortFilterProxyModel没有中继dataChanged信号
QSortFilterProxyModel no relaying the dataChanged signal
我有一个自定义模型,当一些单元格的值发生变化时,它会不时地附加以发出dataChanged()信号。这本身就非常有效,并且视图会根据需要进行更新。
但后来我尝试在中间插入一个QSortFilterProxyModel,以允许对视图进行排序(不需要过滤),显然dataChanged()信号并没有通过代理模型进行中继。
据我所知,这是QSortFilterProxyModel的预期行为,除了将QSortFilterProxy Model子类化之外,还有什么解决方案可以添加一个插槽来中继dataChanged()信号并相应地映射项吗?
在我的情况下,这是非常直接的,因为一次只更新一个单元格,或者更新一整列,但没有其他奇怪的地方,所以映射索引应该非常简单。。。
QSortFilterProxyModel应该像普通模型一样发出dataChanged()信号,因此视图将得到更新。我们可以在Qt的源代码(qsortfilterproxymodel.cpp)中看到,qsortfilterproxymodel::setSourceModel将一个处理程序附加到源模型的dataChanged()信号。处理程序完成其工作,并在一切顺利的情况下发出QSortFilterProxyModel的dataChanged()信号。请注意,它有许多检查,可以防止信号发出。
如果没有发生这种情况,请确保您的自定义模型得到正确实现,否则QSortFilterProxyModel逻辑可能会抑制信号。例如,当我遇到同样的问题时,结果发现我对QAbstractItemModel::parent方法的实现是错误的。
在最坏的情况下,您可以尝试自己编译Qt,并进行一些调试以找到原因。
您可以通过以下方式从QSortFilterProxyModel调用信号,而无需继承QMetoObject::invokeMethod不要忘记检查助手功能:mapFromSourcemapToSource
- Qt VTK交互风格的信号到小部件
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- QAbstractTableModel,并为单行发出dataChanged
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 线程之间的布尔停止信号
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 有可能在信号处理程序中设置promise吗
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 在条件变量中触发错误信号的频率是多少
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 调试和自由执行中的信号处理
- 升压信号2将插槽传递到成员功能以断开连接
- 如果由同一应用程序触发,则丢弃QClipboard :: DataChanged()信号
- Datachanged信号与ComboboxDelegate不起作用
- QSortFilterProxyModel没有中继dataChanged信号
- 是QAbstractItemModel的dataChanged信号,也是为其子级的更改而激发的
- QAbstractItemModel:为什么在模型中插入大量项目时发出dataChanged和insert行信号如此缓慢
- C++/QML:ListView未根据来自QAbstractListModel的dataChanged信号进行更新