【发布时间】:2012-03-06 07:43:26
【问题描述】:
我正在尝试添加始终为空的最后一行。现在我有代理模型,我在其上调用 insertRow() - 插入了行。但是我需要添加另一行,当最后一行被更新时(数据被插入)。我应该连接哪个信号?
有时会出现奇怪的错误 - 单击现有行时,数据会复制到最后一行。您知道可能出了什么问题吗?
感谢您的帮助
【问题讨论】:
标签: c++ sql qt user-interface qsqltablemodel
我正在尝试添加始终为空的最后一行。现在我有代理模型,我在其上调用 insertRow() - 插入了行。但是我需要添加另一行,当最后一行被更新时(数据被插入)。我应该连接哪个信号?
有时会出现奇怪的错误 - 单击现有行时,数据会复制到最后一行。您知道可能出了什么问题吗?
感谢您的帮助
【问题讨论】:
标签: c++ sql qt user-interface qsqltablemodel
您可能希望将插槽连接到QSqlTableModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) 信号。
【讨论】:
if(end.row() == this->rowCount() - 1) { qDebug() << "New record added"; this->insertRow(end.row()); } 但是,当我点击表格时,数据被复制。
我试过了。
有几个问题让我重新思考如何实现它:
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 ...等)根据此,您必须决定何时添加新的空白行。 (上次更改有什么错误吗?)
不是不可能,而是丑陋。
Model 和 Table 过于耦合,无法找到简单的解决方案。 我最终使用表格下方的表格来添加新数据。
与使用 Qt 提供的模型和/或表相比,我会更好地重新实现您自己的模型和/或表。
【讨论】: