我正在尝试使用自己的QAbstractTableModel
- 后代类和QTableView
进行基于记录的网格编辑。编辑完成后,模型会向其submit()
或revert()
个插槽发送信号。但是没有参数,因此模型不知道需要向数据存储区提交(刷新)哪条记录。我试图通过捕捉model.setData()/removeRows()/insertRows()
来设置我自己的更改跟踪,但这有点乱。有没有正确的方法呢?
答案 0 :(得分:1)
根据QAbstractTableModel
上的文档:
子类
在继承QAbstractTableModel时,必须实现rowCount(), columnCount()和data()。 index()和的默认实现 parent()函数由QAbstractTableModel提供。表现得很好 models也将实现headerData()。
可编辑模型需要实现setData(),并实现flags() 返回包含Qt.ItemIsEditable的值。
因此,您重新实施setData
,removeRows
和insertRows
的事实是恰当的。此类的其他子类也使用自己的内部缓存来跟踪正在更改的内容,以便在需要时将其提交到数据源。如果你的方法到目前为止很糟糕,那么你可能只需要改进你正在做的事情,因为路径是正确的。
setData
是您可以在内部数据结构中跟踪更改内容的位置。因此,例如,如果您的模型是内部的基本字典,并且将提交到基于Web的REST服务,您将管理内部字典中数据的更改。调用submit
时,您将使用该内部缓存进行必要的REST调用以发送数据并进行同步。