如何使用QDBusConnection::sessionBus().connect() 来处理Notify信号?
在Qt5和 Qt6下,我试图处理如下信号:
QDBusConnectionPrivate() got message (signal): QDBusMessage(type=Signal, service=":1.10", path="/ca/desrt/dconf/Writer/user", interface="ca.desrt.dconf.Writer", member="Notify", signature="sass", contents=("/org/mate/desktop/interface/gtk-theme", {""}, ":1.10:user:xyz") )
因此,为了监听DBus消息,我使用以下代码:以下代码:
result = QDBusConnection::sessionBus().connect(
"ca.desrt.dconf",
"/ca/desrt/dconf/Writer/user",
"ca.desrt.dconf.Writer",
"Notify",
this,
SLOT(onDconfNotify(QString)));
if (result)
qDebug() << "started";
在Qt5和 Qt6下,我得到:“started”。
当信号发出时,onDconfNotify 在Qt 6下被调用。但在Qt 5.15下,onDconfNotify 从不被调用。我不明白为什么……有人能帮忙吗?
解决方案
如果 signature="sass",这会被Qt转换为 QString、QStringList、QString,因此正确的实现应该是:
result = QDBusConnection::sessionBus().connect(
"ca.desrt.dconf",
"/ca/desrt/dconf/Writer/user",
"ca.desrt.dconf.Writer",
"Notify",
this,
SLOT(onDconfNotify(QString, QStringList, QString))
);
为了连接到 Notify(QString, QStringList, QString)。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。