我有一个 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应用程序的程序的摘录。