Qt - 在应用程序关闭时同步 SQLite 数据库

Qt - sync SQLite data base on application close

数据库通过以下代码在应用程序中打开:

db = QSqlDatabase::addDatabase("QSQLITE");
bool dbExists = QFile::exists("base.db");
db.setDatabaseName("base.db"); // ":memory:"
if (!db.open()) {
    db.close();
    QMessageBox::critical(0, tr("Cannot open database"),
                          tr("Unable to establish a database connection.\n"
                             "This example needs SQLite support. Please read "
                             "the Qt SQL driver documentation for information how "
                             "to build it."), QMessageBox::Cancel);
    return;
}
if (!dbExists)
    createDB();

我已经通过 QDataWidgetMapper 将一些表格映射到小部件。在申请 运行 期间一切正常。更改生效。但是在使用现有 base.db 重新启动应用程序后,所有更改都将丢失。应用程序启动速度更快,因此它打开此文件但数据库未更改。

我已经尝试通过

关闭应用程序
db.close();
this->close();

没有运气。 db.open:

之后甚至同步查询也没有帮助
QSqlQuery query(db);
query.exec("PRAGMA synchronous = ON;");

将更改同步到 base.db 我错过了什么?

UPDATE. 您可以尝试构建 sqlwidgetmapper 标准示例并将 :memory: 更改为 "base.db" 文件。它也不会将更改的数据保存到文件中。

问题可能是manual submit policy

要么将其切换为自动,要么在适当的时候手动调用 QDataWidgetMapper::submit()(在小部件丢失新值之前)。