我有一个复杂的软件,它有几个表和表单。我需要在QSqlQueryModel中加入一些表,并将结果显示在QTableView中我使用QSortFilterProxyModel可以在包含结果的QTableView中进行搜索当我创建QTableView并设置模型时,一切都正常,但当软件的另一部分数据库发生变化时,我看不到QTableView中的数据变化。
这是一个代码片段:
void form1::setModels()
{
queryModel = new QSqlQueryModel();
queryModel->setQuery("SELECT * FROM table1");
proxyModel = new QSortFilterProxyModel(queryModel);
proxyModel->setSourceModel(queryModel);
ui->tableView->setModel(proxyModel);
}
这个方法是在我创建form1时调用的,它被放置在数据库连接下面,并打开((调用
在我用exec调用form1之前,我试着做一个:(form1包含提到的QTableView(
queryModel->query().exec()
为了更新查询,但在我关闭程序并再次运行之前,不会发生任何事情。
就像模型中间的某个东西没有正确更新
如果我在表单exec方法之前调用setModels(((不仅在表单的构造函数中(,QTableView会正确显示更改,但我认为这不是正确的更新方式,我已经有了模型和表视图,我认为我只需要更新查询并刷新QTableView和QSortFilterProxyModel,但我找不到方法。
但当软件的另一部分数据库发生变化时,我在QTableView中看不到数据的变化。
您需要更新模型,然后会通知视图所做的任何更改。更改表table1
时,将对此模型进行重置(重置模型,然后查询数据库(。