0

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

奇妙なエラーが発生することがあります - 既存の行をクリックすると、データが最後の行にコピーされます。何が間違っている可能性がありますか?

手伝ってくれてありがとう

4

2 に答える 2

1

スロットをQSqlTableModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight )信号に接続することをお勧めします。

于 2012-03-06T09:58:17.990 に答える
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が提供するものを使用するよりも、独自のモデルやテーブルを再実装する方がよいでしょう。

于 2012-12-11T11:32:29.040 に答える