QT Dbus共享接口,适用于两种应用

时间:2012-09-24 08:01:47

标签: qt dbus

我有以下设置:

  • 我有两个应用程序,属于同一个逻辑组(逻辑组=我们公司的产品)
  • 这两个应用程序需要连接到DBus到相同的接口(我们有更多的产品,所有产品都应该使用自己的DBus接口)并公开一些功能(以及所有这些与QtDBus)。

所以我试着(箭头不是C ++指针操作:)):

App1 -> get QDBusConnection::sessionBus();
App1 -> registerService("com.una-frog.ddm") 
App1 -> registerObject ("/DDM-gui")

然后

App2 -> get QDBusConnection::sessionBus();
App2 -> registerService("com.una-frog.ddm") 
App2 -> registerObject ("/DDM-cli")

并启动App1和App2。

此时App2抱怨它无法注册该服务,因为App1已经注册了它。那是对的。

我可以轻松地将App1注册到“com.una-frog.ddm。 gui ”,将App2注册到“com.una-frog.ddm。 cli ”但我我宁愿尝试使用一个通用接口和两个采取所有必要操作的对象。

任何人都知道如何实现连接到同一界面的两个QtDBus应用程序?

1 个答案:

答案 0 :(得分:1)

这两个应用可以共享DBus 界面 com.una-frog.ddm。但是registerService不适用于接口,它适用于DBus 服务。服务名称不能在应用程序之间共享,因为它们用于路由方法调用(单播)。

如果您重新设计API以便两个应用程序监听(广播)信号,那么您甚至不需要注册服务名称。

或者,总线具有服务名称的排队所有者的概念(请参阅the specification中的DBUS_NAME_FLAG_*)。如果两个应用程序提供相同的服务并且您不关心处理它的那个,那么这很有用。 Qt似乎有这个:http://doc.qt.digia.com/stable/qdbusconnectioninterface.html#registerService