使用Qt D-Bus 适配器
适配器是一类特殊的类,可附加到任何继承自QObject 的类上,并通过 D-Bus 向外部世界提供接口。适配器旨在作为轻量级类,其主要目的是中继与真实对象之间的调用,可能对来自外部世界的输入进行验证或转换,从而保护真实对象。
与多重继承不同,适配器可以随时添加到任何对象上(但无法移除),这在导出现有类时提供了更大的灵活性。 适配器的另一个优势在于,它可以在不同接口中同名的方法中提供相似但不完全相同的功能,这种情况在向对象添加标准接口的新版本时非常常见。
要使用适配器,必须创建一个继承自QDBusAbstractAdaptor 的类。由于这是一个从QObject 派生的标准类,因此声明中必须包含Q_OBJECT 宏,且源文件必须使用moc工具进行处理。该类还必须包含一个名为"D-Bus Interface" 的Q_CLASSINFO 条目,用于声明其要导出的接口。每个类仅支持一个此类条目。
该类中的任何公共槽(slot)都将通过 D-Bus 总线上的 MethodCall 类型消息进行访问。(更多信息请参阅《在 D-Bus 适配器中声明槽》)。该类中的信号将自动通过 D-Bus 进行转发。但是,并非所有类型都允许在信号或槽的参数列表中使用:更多信息请参阅《Qt D-Bus 类型系统》。
此外,任何使用Q_PROPERTY 声明的属性都将通过 D-Bus 上的 Properties 接口自动暴露。由于QObject 属性系统不允许存在不可读的属性,因此无法使用适配器声明只写属性。
更多信息:
- 在 D-Bus 适配器中声明槽
- 在 D-Bus 适配器中声明信号
- Qt D-Bus 类型系统
- 在D-Bus 复杂乒乓球示例中,
complexpong.h和complexpong.cpp展示了QDBusAbstractAdaptor 的实现。
另请参阅 QDBusAbstractAdaptor 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.