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