根据《​​PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法​​》可以重写从PyQt的Model类继承的setData方法来实时截获View中对数据的更改,但需要注意,setData方法调用不光发生在View中实际存储的内部数据修改,也可能是其他与数据相关的属性或值调整,如数据项的checked变化,数据的对齐风格变化等。

因此如果应用需要响应数据的变化实时做出反应而重写setData时,需要判断setData的数据变化的角色,具体来说就是setData方法的参数role而采取不同的应对措施,如只是需要将变得数据更新到存储,则需要判断role是否为Qt.EditRole,关于role的取值说明请参考《​​PyQt学习随笔:Model/View中诸如DisplayRole的数据角色及含义​​》。

下面是一段重写setData方法的示例:

    def setData(self, index, value, role=Qt.EditRole):
# 编辑后更新模型中的数据 View中编辑后,View会调用这个方法修改Model中的数据
row,column = index.row(),index.column()
print(f"update {row}{column}列角色为{role}的数据为:{value},初始数据为{index.data()}")

if self.saveupdate and role==Qt.EditRole:
self.save(row,columnn,value)

return super().setData(index, value, role)

​​