0

我正在尝试添加始终为空的最后一行。现在我有代理模型,我在其上调用 insertRow() - 插入了行。但是我需要添加另一行,当最后一行更新(插入数据)时。我应该连接哪个信号?

有时会发生奇怪的错误 - 单击现有行时,数据会复制到最后一行。你知道什么是错的吗?

感谢帮助

4

2 回答 2

1

您可能希望将插槽连接到QSqlTableModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight )信号。

于 2012-03-06T09:58:17.990 回答
0

我试过了。

有几个问题让我重新思考如何实现这一点:

  1. QSqlTableModel 如何在内部处理缓冲区(即使在子类化时也无法访问的 d 指针)是您看到将数据复制到最后一行的奇怪事情的原因。

  2. 您无法区分表行数和基础模型行数。它们总是相同的,您必须使用一些标志来知道您何时已经有了新行并且不想添加另一个(更改任何行时会发出 dataChanged))。至少,您必须连接 4 个信号才能使这些标志保持更新:

     void   beforeDelete ( int row )
     void   beforeInsert ( QSqlRecord & record )
     void   beforeUpdate ( int row, QSqlRecord & record )
     void   primeInsert ( int row, QSqlRecord & record )
    
  3. 如果您有多个列。你选择了哪种提交方式?(手动,onrowchange ...等)根据此,您必须决定何时添加新的空白行。(上次更改有任何错误吗?)

不是不可能,而是丑陋。

Model 和 Table 过于耦合,无法找到一个简单的解决方案。我最终使用表格下的表格来添加新数据。

与使用 Qt 提供的模型和/或表相比,我会更好地重新实现您自己的模型和/或表。

于 2012-12-11T11:32:29.040 回答