Зависит от того, как вы вставляете новые данные в базу данных.
Если вы просто сделать QSqlQuery query("INSERT INTO .... ")
где-то в коде, тогда единственный способ обновления QSqlQueryModel
это сбросить его, потому что QSqlQueryModel
не самообновляющаяся - это просто выполняет запрос и дает результаты. Он не может просить базу данных дать ей «новые данные», поскольку база данных не знает, какие «новые данные» относятся к модели, и нет «push-уведомлений» из баз данных (обычно).
Я бы рекомендовал использовать QSqlTableModel
, что позволяет также вставлять новые строки, и модель автоматически запускает запрос INSERT
для сохранения новых данных в базе данных. Он также допускает модификации ("UPDATE ..."
).
// Setup the model
QSqlTableModel *model = new QSqlTableModel(this, database);
model->setTable("myTable");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select(); // will populate the model
...
...
// Insert new row and data
const int row = model->rowCount();
model->insertRows(row, 1);
model->setData(model->index(row, 0), "First column value");
model->setData(model->index(row, 1), "Second column value");
// Commit the new record into database
model->submitAll(); // submit
Как вы можете видеть, QSqlTableModel почти полностью скрывает SQL поддержку от вас, и вы используете его, как если бы вы имели дело с обычной моделью.
спасибо за ваш ответ. Мое приложение требует отфильтрованных данных, поэтому мне нужно использовать модель QSqlQueryModel, также я не вижу метод submitAll в QSqlQueryModel, поэтому, возможно, я не могу вставлять эту модель. – Kamath
@ Kamath вы можете фильтровать данные в QSqlTableModel с помощью функции setFilter(). – iamantony