У меня есть SQLite база данных. Я пытаюсь записать события, связанные с изменениями в базе данных, в программе Qt, которая использует модуль QtSql , например, когда новая запись вставляется в таблицу извне программы Qt. QSqlDatabase class предлагает функцию подписки на уведомления, однако в платформе Qt нет примера, который иллюстрирует, как настроить и перехватить события. Я принял (после некоторого поиска в Интернете) следующий подход, но он не работает, и я не мог найти почему.
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 . Приведенный выше код является фрагментом программы, основанной на приложении виджета Qt .