sql - QSqlDatabase 和 QTableView 不同步(SQLite)

标签 sql qt sqlite pyqt pyside

我正在使用带有 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/

相关文章:

ios - 用于从 coredata 查询字符串的子字符串的谓词

php - MySQL 查询 - 按升序显示最新的 3 条记录

Mysql多次连接两个表

sql - Oracle Pivot 查询给出的列的列名称周围带有引号。什么?

c++ - 将对象 (.o) 文件添加到 qtcreator 项目

qt - Qt Creator 中的硬编码 QMAKESPEC?

linux - SQLite WAL 性能改进

sql - 返回受 UPDATE 语句影响的行数

qt - 使用 Qt 从字符设备读取

sqlite - Sqlite 表中的默认值 string.empty