行插入时QTableView刷新

时间:2015-02-25 13:57:53

标签: c++ qt

在使用QSqlQueryModel的QTableView中,刷新新行插入视图的正确方法是什么?我看到重置模型与视图有效,但我认为这不是正确的方法。

简单的代码段应该有帮助。

2 个答案:

答案 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子句中产生什么结果。