如何使用QDBusConnection::sessionBus().connect() 来处理Notify信号?

编程语言 2026-07-10

在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转换为 QStringQStringListQString,因此正确的实现应该是:

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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章