在使用QSqlQueryModel的QTableView中,刷新新行插入视图的正确方法是什么?我看到重置模型与视图有效,但我认为这不是正确的方法。
简单的代码段应该有帮助。
答案 0 :(得分:5)
取决于您如何将新数据插入数据库。
如果您只是在代码中的某处执行QSqlQuery query("INSERT INTO .... ")
,那么更新QSqlQueryModel
的唯一方法就是重置它,因为QSqlQueryModel
不是自我更新的 - 它只是运行查询并给你结果。它不能要求数据库给它"新数据",因为数据库不知道"新数据"是关于模型,并没有"推送通知"来自数据库(通常)。
我建议使用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支持,并且您使用它就像处理普通模型一样。
答案 1 :(得分:0)
由于我还没有被允许发表评论,这里作为(附加)答案:
正如DanielVrátil所写,你应该使用QSqlTableModell,因为它处理插入。 您评论说,您需要过滤器,您也可以使用Tablemodel执行此操作: 例如:
model->setFilter("errorlog_permission < 3");
究竟会在查询的where子句中产生什么结果。