【问题标题】:QTableView with a QSortFilterProxyModel seted on, based on a QSqlQueryModel doesn't update when the data in the database change设置了 QSortFilterProxyModel 的 QTableView,基于 QSqlQueryModel 在数据库中的数据更改时不会更新
【发布时间】:2021-09-03 14:35:20
【问题描述】:

我有一个复杂的软件,其中包含多个表格和表格。 我需要在 QSqlQueryModel 中加入一些表并将结果显示到 QTableView 我使用 QSortFilterProxyModel 能够在包含结果的 QTableView 中进行搜索 当我创建 QTableView 并设置模型时,一切正常,但是当在软件的另一部分数据库发生变化时,我看不到 QTableView 中的数据变化。

这是一个sn-p代码:

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 会正确显示更改,但我认为这不是进行更新的正确方法,我已经有了模型,还有tableview,我想我只需要更新查询,刷新QTableView和QSortFilterProxyModel,但是我没有找到办法。

【问题讨论】:

    标签: qt qt5 qtableview qsortfilterproxymodel qsqlquerymodel


    【解决方案1】:

    但是当在软件的另一部分数据库发生变化时,我在 QTableView 中看不到数据变化。

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

    【讨论】:

    • 谢谢你 asitdhal,你让我大开眼界!我只需要再次 setQuery 并且模型会自行重置 void QSqlQueryModel::setQuery(const QSqlQuery & query) 重置模型并将数据提供者设置为给定的查询。请注意,查询必须是活动的,不能是 isForwardOnly()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2014-09-19
    • 2018-02-03
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多