设置了 QSortFilterProxyModel 的 QTableView,基于 QSqlQueryModel,当数据库中的数据发生变化时不会更新

QTableView with a QSortFilterProxyModel seted on, based on a QSqlQueryModel doesn't update when the data in the database change

我有一个复杂的软件,它有几个表格和表格。 我需要在 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 时会调用此方法,它位于数据库连接和 open() 调用下方

在我用 exec 调用 form1 之前,我尝试做一个:(form1 包含提到的 QTableView)

queryModel->query().exec()

为了更新查询,但在我关闭程序并再次 运行 之前没有任何反应。

好像模型中间的东西没有正确更新

如果我在表单 exec 方法之前调用 setModels()(不仅在表单的构造函数中),QTableView 会正确显示更改,但我认为这不是进行更新的正确方法,我已经有了模型和表视图,我认为我只需要更新查询并刷新 QTableView 和 QSortFilterProxyModel,但我找不到这样做的方法。

but when in another part of the software the database changes I can't see the data changes in the QTableView.

您需要更新模型,然后视图将收到所做的任何更改的通知。当您更改 table table1 时,您会对该模型进行重置(重置模型,然后查询数据库)。