QtSql:在SQLite数据库中捕获事件通知以了解更改

时间:2019-06-07 19:00:48

标签: qt qtsql qsqldatabase

我有一个 SQLite 数据库。我试图在使用 QtSql 模块的Qt程序中捕获有关数据库更改的事件,例如,当从Qt程序外部的表中插入新记录时。 QSqlDatabase 类提供了用于订阅通知的功能,但是Qt框架中没有用于说明如何设置和捕获事件的示例。我采用了以下方法(在Internet上进行了一些搜索之后),但是它不起作用,我找不到原因。

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("file.db");
if (!db.isOpen()) {        
   qFatal("Failed to open database");          
}

if (db.driver()->hasFeature(QSqlDriver::EventNotifications)) {
        db.driver()->subscribeToNotification("IenState"); //"IenState" is table name

        QObject::connect(db.driver(), SIGNAL(notification(const QString &)),
                         this, SLOT(procEvents(const QString &)));
}
else {
        qFatal("Driver does NOT support database event notifications");
}

//slot function
void DbSqlite::procEvents(const QString &name)
{
    qWarning("%s: %s", __func__, qPrintable(name));

    if (name.compare("IenState", Qt::CaseSensitive) == 0) {
       qWarning("%s: from IenState table", __func__);
    }
}

procEvents 插槽函数永远不会被调用。似乎从未从 db.driver 发出 notification 信号。上面的代码是基于 Qt Widget应用程序的程序的摘录。

0 个答案:

没有答案