我正在使用带有QSqlDatabase
的SQLite数据库,并使用QTableView
和QSqlTableModels
显示数据。
我的应用程序使用QSqlQuery
将数据插入表中,但表不会更新以显示新数据(例如,显示的行数不会更改)。我期待新数据能够自动反映在QTableView
。
我在这里做错了什么?
答案 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
插槽,您应在其中更新模型和视图。