我使用QSqlTableModel
和QTableView
来显示基础SQLite数据库中的表。同时,可以在我的应用程序之外更改表。当发生这种情况时,我需要检测到这一点并刷新QSqlTableModel
和QTableView
。
目前,QSqlTableModel
和QTableView
根本没有检测到更改,直到某些用户操作强制刷新,例如编辑字段。那么我该如何实现呢?
现在我正在考虑轮询,但我不确定要对更改进行轮询,尤其是如何以最小的开销进行轮询。我只是运行COUNT
SQL查询吗?如果添加了一个元素但删除了另一个元素怎么办?如果没有对表进行任何更改,我宁愿不强制刷新。
那么最好的方法是什么?
答案 0 :(得分:1)
答案 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()
广告位内执行所有必需的操作。