QSqlTableModel中的其他空行

Additional empty row in QSqlTableModel

本文关键字:其他 QSqlTableModel      更新时间:2023-10-16

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

有时会出现奇怪的错误——当单击现有行时,数据会复制到最后一行。你知道哪里出了问题吗?

感谢的帮助

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

我已经试过了。

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

  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提供的模型和表。

相关文章: