如何使用Qt QSqlDriver::subscribeToNotification with SQLite3?
How to use Qt QSqlDriver::subscribeToNotification with SQLite3?
>我正在编写一个Qt应用程序,不同的模型可以插入/删除/更新同一个表。当一个模型更改数据库时,我希望其他模型收到更改通知,以便他们可以相应地更新其视图。
似乎在SQLite中监视插入,删除和更新的最佳方法是使用QSqlDriver::subscribeToNotification
然后对通知信号做出反应。我知道语法是这样的:
db.driver()->subscribeToNotification("anEventId");
但是,我不确定anEventId
是什么意思。anEventId
是SQLite提供的常量,还是我使用触发器或其他东西将这些特定事件编码到SQLite中,然后订阅它们?
Qt sqlite 驱动程序中的subscribeToNotification
实现依赖于sqliteC API 的sqlite3_update_hook函数。但是,Qt 驱动程序不会转发执行的操作,只会转发表名,这应该是传递给subscribeToNotification
的anEventId参数。简而言之,您可以侦听任何表中发生的事件(假设它是一个 rowid 表,但通常是(,将表名传递给subscribeToNotification
方法。但是,当您的插槽捕获到notification
信号时,您只知道该表中发生了操作,但(遗憾的是(Qt不会告诉您是哪一个(插入,更新或删除(。
所以,给定一个QSqlDriver * driver
:
driver->subscribeToNotification("mytable1");
driver->subscribeToNotification("mytable2");
driver->subscribeToNotification("mytable3");
然后在您的插槽中:
void MyClass::notificationSlot(const QString &name)
{
if(name == "mytable1")
{
// do something
}
else if(name == "mytable2")
{
//etc...
相关文章:
- Problems with std::cin.fail()
- 无法在windows上使用mingw将sqlite3与c连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- sqlite3 和生成文件中的链接出现问题
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- 如何在 sqlite3 中的表中添加整数列表
- Boost.TEST with CLion: "Test framework quit unexpectedly"
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Issues with Win32 ReadProcessMemory API
- Qt with WinAPI MouseProc
- [[maybe_unused]] with structured_binding?
- Issue with WriteProcessMemory
- SQLite3 在 c++ 中输出 SELECT 上的空列表
- OpenCV RTP-Stream with FFMPEG
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 如何使用Qt QSqlDriver::subscribeToNotification with SQLite3?
- NPM sqlite3 with sqlcipher support
- Sqlite3 SIGSEGVs with Valgrind
- QDateTime with sqlite3
- QSqlQuery INSERT statement with sqlite3