这是我的用例(非常简化)。
我在QSQLTableModel中有来自DB的一些数据,我需要对其进行转换:将几个字段合并为一个(并显示为这样)或将一个字段拆分为几个。 在模型/视图中应该如何以及在何处进行此操作?
注意:
我尝试使用AbstractProxyModel执行此操作,但我想,它仅适用于过滤或排序。我可以分配新数据并返回QModelIndex(它带有指向数据的指针)但是哪个对象应该在以后解除分配数据?
修改View对象也无济于事,因为它会分别处理每个表格单元格。
请注意,我无法以任何方式更改数据库。 在Qt中如何做到这一点?我已经整整花了两天时间才进入一个又一个的墙。
答案 0 :(得分:2)
使用QAbstractProxyModel
并不是错误的方法,您可以使用它来映射任何类型的源模型来重构数据。但这将是一项很多工作,您必须重新实施多种方法,包括columnCount
,data
,flags
,index
等。实际上,您必须确保此模型的索引映射到源模型的正确数据。此外,如果您有动态模型,那么您将需要处理来自源模型的信号,修改值并重新发射它们。如果您希望视图也可以编辑数据,那么您将不得不重新实现setData
等。
例如,如果您有一个附加了两个值的列,并且您希望将它们显示在两个单独的列中,那么columnCount
应该返回一个额外的列,data
应该检索原始数据和根据索引中的列只返回一个部分,必须修改index
以检查此模型的新边界等。
如果您需要更具体的帮助,请发布一些示例代码。