ビューを通してSQLiteデータベースを更新しようとすると、異常な動作が発生します。使用する編集方法に応じて、ビューを更新するかデータベースを更新することができますが、データベースを更新してビューに新しい値を表示させることはできません。私はQSqlTableModel::OnManualSubmit
Qt:ビューを通してデータベースモデルを更新する
ビューの変更を使用しますが、基礎となるデータベースが更新されない場合は
auto sdb = QSqlDatabase::addDatabase("QSQLITE");
sdb.setDatabaseName("database.db");
QSqlTableModel *model = new QSqlTableModel(0, sdb);
model->setTable("table");
//model->setEditStrategy(QSqlTableModel::OnFieldChange);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
QTableView *tv = new QTableView();
tv->setModel(model);
tv->show();
// I'm not sure, this connect statement is needed.
// Either way, it does not change the behavior of the problem I observe
connect(model,
SIGNAL(dataChanged(const QModelIndex &,
const QModelIndex &,
const QVector<int> &)),
tv,
SLOT(dataChanged(const QModelIndex &,
const QModelIndex &,
const QVector<int> &)));
:
は基本的に、私は次のコードを使用します。私。アプリケーションを再起動する(またはデータベースを再ロードする)と、フィールドは更新されません。私は手動で変更を基になるDBに提出しなければならないので、どちらが当てはまりますか?
Iビューを編集した後入る打撃後QSqlTableModel::OnFieldChange
を使用すると、(編集された行の)ビューが空白になります。基礎となるDBは更新され、DBで見ることができますが、何らかの形で新しい値が得られません。
私はModel/Viewでデータベースを使用していませんでしたが、私の助言:何か変なことがあり、進行方法がわからない場合は、代理人を作成してデータ編集を手動で処理することを検討してください。 –
あなたはどのプラットフォームにいますか?マイナープラットフォーム上のいくつかのDBドライバプラグインはかなりバグです – IlBeldus
マイナーなプラットフォームはLinux(RedHat)です。デリゲートを使うことは良いアドバイスと思われます!残念ながら、それは同じ動作を示しています。 –