复杂类型延迟回复

问题描述 投票:0回答:1

我的服务提供了一个 DBus 方法,该方法返回带有签名

a(susbs)
的数据。为了实现这个工作,我创建了一个数据结构(
MyStructure
),实现了用于编组/解组的流运算符并注册了类型。如此处所述。

到目前为止,一切都很好。

但是,由于生成响应数据需要时间,因此我想发送延迟回复。 所以我遵循手册
在手册中的示例中,如下所示:

struct RequestData
{
    QString request;
    QString processedData;
    QDBusMessage reply;
};

void sendReply(RequestData *data)
{
    // data->processedData has been initialized with the request's reply
    QDBusMessage &reply = data->reply;

    // send the reply over D-Bus:
    reply << data->processedData; // <-- Here data is added to the reply
    QDBusConnection::sessionBus().send(reply);

    // dispose of the transaction data
    delete data;
}

就我而言,我想要添加到回复中的数据是

QList<MyStructure>
类型。如何将其添加到回复中?

我几乎通过将数据转换为

QVariant
列表来使其工作。像这样:

void sendReply(RequestData *data, const QList<MyStructure>& result)
{
  QList<QVariant> variantList;
  for (const auto &item : result) {
    QVariant variant;
    variant.setValue(item);
    variantList.append(variant);
  }

  QDBusMessage &reply = data->reply;
  reply << variantList;
  QDBusConnection::sessionBus().send(reply);
}

但是 DBus 响应具有签名

av
,其中数组中的每个项目的类型为
susbs

c++ qt dbus
1个回答
0
投票

终于解决了这个问题。这比我想象的要容易:

void sendReply(RequestData *data, const QList<MyStructure>& result)
{
  QVariant v;
  v.setValue(result);

  QDBusMessage &reply = data->reply;
  reply << v;
  QDBusConnection::sessionBus().send(reply);
}
© www.soinside.com 2019 - 2024. All rights reserved.