3

我正在尝试使用我自己的QAbstractTableModel-descendant 类和QTableView. 编辑完成后,模型会接收到它submit()revert()插槽的信号。但是没有参数,因此模型不知道它需要提交(刷新)数据存储区的哪条记录。我试图通过 catch 设置我自己的更改跟踪model.setData()/removeRows()/insertRows(),但这有点乱。有正确的方法吗?

4

1 回答 1

1

根据以下文档QAbstractTableModel

子类化

子类化 QAbstractTableModel 时,必须实现 rowCount()、columnCount() 和 data()。index() 和 parent() 函数的默认实现由 QAbstractTableModel 提供。表现良好的模型也将实现 headerData()。

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

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

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

于 2012-10-08T20:09:33.640 回答