2

QTableView をグリッド テーブルのように動作させようとしています。つまり、ユーザー入力の新しいレコードが挿入される場所には、常に 1 つの空の行があります。MS Access のサブフォームを考えてみてください。または、Web 開発ではインライン編集と呼んでいると思います。

私はかなり標準的なコードであるQt 4.7.4を使用しています:

model = new QSqlTableModel(this);
model->setTable("order_details");
models->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setFilter(QString("parent_id = '%1'").arg(ID->toString());
model->select();
model->insertRow(model->rowCount());  //worked womehow
//QSqlRecord rec = model->record();
//rec.setValue("fieldName", var);  //useful for initializing some fields
//model->insertRecord(-1, rec);  //internally call insertRow(rowCount()) then setRecord

ui->tblGrid->setModel(model);

コンストラクターに insertRow または insertRecord を指定しても、何も起こりません。行は追加されません。しかし、それらのいずれかを呼び出すプッシュボタンを作成すると、新しい行が追加されますが、編集できません

これを観察するには、 Qt のキャッシュされたテーブルの例を変更してみてください。ただし、プッシュ ボタンから呼び出されたスロットでは、問題なく行が追加されます。もちろん、編集不可。

だから私の質問は:

  1. なぜこうなった?QSqlTableModel のソース コードを十分に確認しましたが、それを理解するには、QSqlRecord、QSqlQuery、QAbstractItemModel なども理解する必要があります。
  2. 編集できない行を回避するために、Qt::ItemIsEditable と Qt::ItemIsenabled を無効にするために QSqlTableModel オーバーライド flags() をサブクラス化しました。私は何を間違えましたか?
  3. 私は最終的に QTableView をサブクラス化してこの動作を取得することを知っているので、誰かが私へのポインタ、おそらく私が読むことができるプロジェクトのソースを持っているとありがたいです。

ありがとうございました、

エヴァン

4

0 に答える 0