如何将复杂数据打包到 QtDBus 回复中

How to pack complex data into a QtDBus reply?

本文关键字:QtDBus 回复 复杂 数据      更新时间:2023-10-16

我必须在Qt中实现一个DBus服务,该服务必须返回遵循给定规范的相当复杂的数据片段。数据本质上是一系列经过测试的地图、数组、结构和其他变体。

找不到一种方便的方法来将所有这些打包到我的方法的回复中。似乎我应该能够为此使用 QDBusArgument 类。例如,要创建一个字符串数组,我应该能够这样做:

QDBusArgument arg;
arg.beginArray( qMetaTypeId<QString>());
arg << "Hello" << "World";
arg.endArray();
QVariant var = arg.asVariant();

但这行不通。看来我需要煞费苦心地手动构建QList变体。肯定有更好的方法吗?

我认为这样的事情应该对您有所帮助

QDBusMessage msg = QDBusMessage::createSignal( ... )
QStringList strlist;
strlist << "Hello" << "World";
msg << QVariant::fromValue( strlist);
QDBusConnection::systemBus().send( msg );

注: 如果使用自定义类型,则应使用 Q_DECLARE_METATYPE() 宏注册自定义类型。