当从我的应用程序外部更改基础SQL表时,自动刷新QSqlTableModel / QTableView

时间:2014-10-14 16:06:43

标签: c++ sql qt sqlite

我使用QSqlTableModelQTableView来显示基础SQLite数据库中的表。同时,可以在我的应用程序之外更改表。当发生这种情况时,我需要检测到这一点并刷新QSqlTableModelQTableView

目前,QSqlTableModelQTableView根本没有检测到更改,直到某些用户操作强制刷新,例如编辑字段。那么我该如何实现呢?

现在我正在考虑轮询,但我不确定要对更改进行轮询,尤其是如何以最小的开销进行轮询。我只是运行COUNT SQL查询吗?如果添加了一个元素但删除了另一个元素怎么办?如果没有对表进行任何更改,我宁愿不强制刷新。

那么最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

SQLite没有允许多个进程实时通信的机制。

检测数据库文件中更改的最简单方法是file change counter

但是,如果您可以让所有应用程序合作,您应该使用其他一些机制来发送通知。

答案 1 :(得分:1)

也许它会对你有用。尝试使用QFileSystemWatcher检测任何文件更改。

    QFileSystemWatcher *watcher = new QFileSystemWatcher(this);
    watcher->addPath("path");
    connect(watcher,SIGNAL(fileChanged(QString)),SLOT(updateData()));

插槽:

void QSSViewer::updateData()
{
    qDebug() << "changed";
}

我在计算机上对其进行了测试,当我使用其他程序更改数据库时,QFileSystemWatcher每次都会收到此更改。因此,您可以在updateData()广告位内执行所有必需的操作。