QSqlDatabase和QTableView不同步(SQLite)

时间:2015-01-25 22:29:37

标签: sql qt sqlite pyqt pyside

我正在使用带有QSqlDatabase的SQLite数据库,并使用QTableViewQSqlTableModels显示数据。

我的应用程序使用QSqlQuery将数据插入表中,但表不会更新以显示新数据(例如,显示的行数不会更改)。我期待新数据能够自动反映在QTableView

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

Qt不支持此功能。更改表时,没有通知机制来自动更新模型和视图。虽然您可以按照here所述的某种方式在PostgreSQL中执行此操作,但在SQLite中,您需要定期查询数据库并更新成本高昂的视图。另一种选择是使用QFileSystemWatcher来捕获文件更改并按时更新视图:

QFileSystemWatcher *databaseWatcher = new QFileSystemWatcher(this);
databaseWatcher->addPath("Path/To/database.sqlite");
QObject::connect(databaseWatcher, SIGNAL(fileChanged(QString)), this, SLOT(refreshView()));

现在它监视数据库文件,当它被外部进程或自己更改时,会发出fileChanged信号并调用refreshView插槽,您应在其中更新模型和视图。