我试图添加始终为空的最后一行。现在我有代理模型,我在其上调用insertRow() - 插入行。但是当我更新最后一行(插入数据)时,我需要添加另一行。我应该连接哪个信号?
有时会发生奇怪的错误 - 当点击现有行时,数据会被复制到最后一行。你知道什么是错的吗?
感谢您的帮助
答案 0 :(得分:1)
您可能希望将插槽连接到QSqlTableModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight )
信号。
答案 1 :(得分:0)
我试过了。
有几个问题让我重新思考如何实现这个:
QSqlTableModel如何在内部处理缓冲区(d指针你不能 即使在子类化时访问也是你看到奇怪事物的原因 将数据复制到最后一行。
您无法区分表行计数和基础模型行数。它们总是一样的,你必须使用一些标志来知道你何时有一个新行并且不想添加另一个(更改任何行时会发出dataChanged))。至少有4个信号需要连接以保持这些标志更新:
void beforeDelete ( int row )
void beforeInsert ( QSqlRecord & record )
void beforeUpdate ( int row, QSqlRecord & record )
void primeInsert ( int row, QSqlRecord & record )
如果您有多个列。您选择了哪种提交方式? (手动,onrowchange等)根据这一点,你必须决定何时添加一个新的空白行。 (最后一次更改有错误吗?)
不可能,但丑陋。
模型和表太耦合,无法找到一个简单的解决方案。 我最终使用表格下的表格来添加新数据。
我会更好地重新实现你自己的模型和/或表,而不是使用Qt提供的那些。