QT-Dbus 信号/插槽?

Posted

技术标签:

【中文标题】QT-Dbus 信号/插槽?【英文标题】:QT-Dbus signals/slots? 【发布时间】:2012-09-11 05:44:18 【问题描述】:

如何连接我的 QT 插槽以响应某些 3rd 方服务生成的 D-BUS 信号?

下面的说法对吗?

QDBusConnection bus = QDBusConnection::systemBus();
bus.connect("com.me.foo", "/", "com.me.foo.bar", "foo",
                this, SLOT(fooSignal()));

【问题讨论】:

【参考方案1】:

首先,您必须找出该服务在哪条总线上注册(系统或会话)。对于会话总线,您必须将 QDBusConnection::systemBus() 更改为 QDBusConnection::sessionBus()

要为 connect() 获取正确的参数值,您必须获取服务名称、对象路径、接口和信号名称。

完成这两项任务的最简单方法是使用 qdbusviewer 应用程序,它是 Qt 开发工具(Ubuntu 中的 qt4-dev-tools 或 qttools5-dev-tools)的一部分。它允许查看两条总线上的服务、遍历对象树和列出方法。 D-Bus 接口的属性和信号,由每个注册对象实现。

【讨论】:

以上是关于QT-Dbus 信号/插槽?的主要内容,如果未能解决你的问题,请参考以下文章

两个不同类别的信号和插槽

Qt 信号和插槽发送结构数组

Qt5 信号捕获到插槽生成运行时错误“信号不存在”

打印信号/插槽的跟踪称为

在 QObject 之间跨不同线程连接信号/插槽

Qt4 插槽和信号:Qt4 无法找到信号