我正在使用带有 QSqlDatabase
的 SQLite 数据库并使用 2 QTableView
显示数据与 QSqlTableModels
.
我的应用程序使用 QSqlQuery
将数据插入表中但表格不会更新以显示新数据(例如,显示的行数没有改变)。我期待新数据会自动反射(reflect)在 QTableView
中。 .
我在这里做错了什么?
最佳答案
Qt 不支持此功能。当表被更改时,没有通知机制来自动更新模型和 View 。尽管您可以按照 here 所述的某种方式在 PostgreSQL 中进行操作。但是在 SQLite 中,您需要定期查询数据库并更新昂贵的 View 。另一种选择是使用 QFileSystemWatcher
捕获文件更改并按时更新 View :
QFileSystemWatcher *databaseWatcher = new QFileSystemWatcher(this);
databaseWatcher->addPath("Path/To/database.sqlite");
QObject::connect(databaseWatcher, SIGNAL(fileChanged(QString)), this, SLOT(refreshView()));
现在它监视数据库文件,当它被外部进程或您自己更改时,
fileChanged
发出信号,refreshView
调用插槽,您应该在其中更新模型和 View 。
关于sql - QSqlDatabase 和 QTableView 不同步(SQLite),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28142344/