常に空の最後の行を追加しようとしています。これで、insertRow() を呼び出すプロキシ モデルができました。行が挿入されます。しかし、最後の行が更新される (データが挿入される) ときに、別の行を追加する必要があります。どの信号に接続すればよいですか?
奇妙なエラーが発生することがあります - 既存の行をクリックすると、データが最後の行にコピーされます。何が間違っている可能性がありますか?
手伝ってくれてありがとう
常に空の最後の行を追加しようとしています。これで、insertRow() を呼び出すプロキシ モデルができました。行が挿入されます。しかし、最後の行が更新される (データが挿入される) ときに、別の行を追加する必要があります。どの信号に接続すればよいですか?
奇妙なエラーが発生することがあります - 既存の行をクリックすると、データが最後の行にコピーされます。何が間違っている可能性がありますか?
手伝ってくれてありがとう
スロットをQSqlTableModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight )
信号に接続することをお勧めします。
私はそれを試しました。
これを実装する方法を再考させたいくつかの問題があります。
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が提供するものを使用するよりも、独自のモデルやテーブルを再実装する方がよいでしょう。