我有一个分层数据结构,我将它包装在QModel (继承自QAbstractItemModel)中,并在QTreeView中显示和编辑它。
让我们假设QTreeView显示以下数据:
Item1
|----Item2
|----Item3
|-----Item4
|----Item5现在将发生以下情况:
1)我编辑了Item3并将它的值改为Item3_a。
2) QModel识别该更改,并将包装模型中父项和子项的项值更改为:
Item1_a
|----Item2_a
|----Item3_a
|-----Item4_a
|----Item5_a3) QTreeView通过模型得到关于附加更改的通知(项1、2、4和5)。仅更改显示的值。层次结构保持不变。
我的问题针对第三步:
如何正确地将更改的数据通知给QTreeView?
这是我尝试过的:
我知道有modelReset,但后来QTreeView崩溃了。然而,它应该保持其collpase/expanded状态。
根据文档,使用具有不同父索引的模型的setData方法会给出未定义的行为。我尝试从setData递归地为每个父/子调用setData,但这导致程序崩溃。
我使用的是qt5。
发布于 2019-08-14 05:44:59
我很确定你要找的是"rowsInserted“和与之相关的方法。"dataChanged“信号表示给定的单元格(或区域)的值发生了变化;这与表结构的变化无关。
您在这里所做的是在将条目从一个父级移动到另一个父级时删除和插入行。您需要实现与此相关的所有方法。还有一个"rowsMoved“可能更适合你的需求。
https://stackoverflow.com/questions/57482948
复制相似问题