如何使用QAbstractTableModel.submit \ revert方法?

时间:2012-10-05 17:10:26

标签: qt pyqt pyside

我正在尝试使用自己的QAbstractTableModel - 后代类和QTableView进行基于记录的网格编辑。编辑完成后,模型会向其submit()revert()个插槽发送信号。但是没有参数,因此模型不知道需要向数据存储区提交(刷新)哪条记录。我试图通过捕捉model.setData()/removeRows()/insertRows()来设置我自己的更改跟踪,但这有点乱。有没有正确的方法呢?

1 个答案:

答案 0 :(得分:1)

根据QAbstractTableModel上的文档:

  

子类

     

在继承QAbstractTableModel时,必须实现rowCount(),   columnCount()和data()。 index()和的默认实现   parent()函数由QAbstractTableModel提供。表现得很好   models也将实现headerData()。

     

可编辑模型需要实现setData(),并实现flags()   返回包含Qt.ItemIsEditable的值。

因此,您重新实施setDataremoveRowsinsertRows的事实是恰当的。此类的其他子类也使用自己的内部缓存来跟踪正在更改的内容,以便在需要时将其提交到数据源。如果你的方法到目前为止很糟糕,那么你可能只需要改进你正在做的事情,因为路径是正确的。

setData是您可以在内部数据结构中跟踪更改内容的位置。因此,例如,如果您的模型是内部的基本字典,并且将提交到基于Web的REST服务,您将管理内部字典中数据的更改。调用submit时,您将使用该内部缓存进行必要的REST调用以发送数据并进行同步。