2012-03-06 7 views
0

常に空の最後の行を追加しようとしています。今私はinsertRow()を呼び出しているプロキシモデルを持っています - 行が挿入されます。しかし、最後の行が更新されたとき(データが挿入されたとき)に別の行を追加する必要があります。どの信号に接続すればよいですか?QSqlTableModelの空の行が追加されます

時には奇妙なエラーが発生する - 既存の行をクリックすると、データが最後の行にコピーされます。何が間違っているのか考えていますか?ヘルプ

答えて

1

ため

ありがとうございますQSqlTableModel::dataChanged (const QModelIndex & topLeft, const QModelIndex & bottomRight)信号にスロットを接続したい場合があります。

+0

私はこのようなコードを評価するためにその信号を使用していた: 'IF(end.row()== this->をrowCount() - 1) {qDebug()<< "新レコードが追加"; this-> insertRow(end.row()); } ' ですが、私がテーブルを上っているときは、データがコピーされます。 – myky

0

私はそれを試みました。

私はこれを実装する方法を考え直す作らカップルの問題があります。QSqlTableModelは内部バッファを処理する方法

  1. は、(Dポインタあなたがサブクラス化しても アクセスをカント)あなたは奇妙な見ている理由であります最後の行にデータをコピーするもの

  2. テーブルの行数とモデルの行数を区別することはできません。それらは常に同じですが、新しい行をすでに持っているかどうかを知るためにいくつかのフラグを使用しなければならず、別のフラグを追加したくない場合(行を変更するときにdataChangedが発行されます))。あなたが複数の列を持っている場合は

    void beforeDelete (int row) 
    void beforeInsert (QSqlRecord & record) 
    void beforeUpdate (int row, QSqlRecord & record) 
    void primeInsert (int row, QSqlRecord & record) 
    
  3. :あなたが更新され、これらのフラグを維持するために接続しなければならない4つの信号は、少なくとも、があります。どの提出方法を選択しましたか? (manual、onrowchange ... etc)これに応じて、新しい空行を追加するときに決定する必要があります。 (最後の変更でエラーが発生しましたか?)

醜いですが、醜いです。

モデルとテーブルはあまりにも簡単な解決策を見つけるために結合されています。 新しいデータを追加するために、テーブルの下にフォームを使用しました。

Qtが提供するものを使用するよりも、独自のモデルやテーブルを再実装する方がよいでしょう。

関連する問題