QSqlTableModel中的附加空行

时间:2012-03-06 07:43:27

标签: c++ sql qt user-interface qsqltablemodel

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

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

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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等)根据这一点,你必须决定何时添加一个新的空白行。 (最后一次更改有错误吗?)

  4. 不可能,但丑陋。

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

    我会更好地重新实现你自己的模型和/或表,而不是使用Qt提供的那些。