使用 Qt D-Bus 适配器#
如何在 Qt 中创建和使用 DBus 适配器。
适配器是附加到任何 QObject 派生类的特殊类,它使用 D-Bus 提供与外部世界的接口。适配器是轻量级类,其主要目的是中继对真实对象的调用,可能会验证或转换来自外部世界的输入,从而保护真实对象。
与多重继承不同,适配器可以随时添加到任何对象(但不能删除),这在导出现有类时提供了更大的灵活性。适配器的另一个优点是在不同接口的相同名称的方法中提供类似但不相同的功能,在向对象添加标准接口的新版本时,这种情况可能相当常见。
为了使用适配器,必须创建一个继承自 QDBusAbstractAdaptor
的类。由于这是一个标准的 QObject 派生类,声明中必须出现 Q_OBJECT 宏,并且源文件必须使用 moc 工具进行处理。该类还必须包含一个带有 `"D-Bus Interface"` 名称的 Q_CLASSINFO 条目,声明它导出哪个接口。每个类只支持一个条目。
类中的任何公共槽都可通过 bus 上的 MethodCall 类型消息访问。(有关更多信息,请参阅在 D-Bus 适配器中声明槽)。类中的信号将自动通过 D-Bus 中继。但是,并非所有类型都允许信号或槽的参数列表:有关更多信息,请参阅Qt D-Bus 类型系统。
此外,任何具有 Q_PROPERTY 声明的属性都将自动通过 D-Bus 的 Properties 接口公开。由于 QObject 属性系统不允许有不可读的属性,因此无法使用适配器声明只读属性。
更多信息
在 D-Bus Complex Ping Pong 示例中,
complexpong.h
和complexpong.cpp
显示了QDBusAbstractAdaptor
的一个实现。另请参阅