QtSql: получение уведомления о событиях для изменений в базе данных SQLite - PullRequest
0 голосов
/ 07 июня 2019

У меня есть 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 .

...