2012-03-06 110 views
0

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

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

感谢您的帮助

回答

1

你可能要一个插槽连接至QSqlTableModel::dataChanged (const QModelIndex & topLeft, const QModelIndex & bottomRight)信号。

+0

我用该信号这样来评估代码: '如果(end.row()==这 - > rowCount时() - 1) { qDebug()<< “新记录添加”; this-> insertRow(end.row()); }' 但是,当我登录桌面时,数据被复制。 – myky 2012-03-06 19:27:37

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 ...等)根据这个,你将不得不决定何时添加一个新的空白行。 (上次更改有任何错误?)

不可变形,但丑陋。

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

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