我很难从应该返回整数数组的服务调用中检索值。 接口 xml 文件中的方法调用定义为:
<method name="PurpleFindBuddies">
<annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QList<int>"/>
<arg name="accountId" type="i" direction="in" />
<arg name="screenName" type="s" direction="in" />
<arg name="buddies" type="ai" direction="out" />
</method>
qdbusxml2cpp 生成以下方法:
inline QDBusPendingReply<QList<int> > PurpleFindBuddies(int accountId, const QString &screenName)
{
QList<QVariant> argumentList;
argumentList << QVariant::fromValue(accountId) << QVariant::fromValue(screenName);
return asyncCallWithArgumentList(QLatin1String("PurpleFindBuddies"), argumentList);
}
我还添加了
Q_DECLARE_METATYPE(QList<int>)
在生成的 .h 文件的顶部。 在主要.cpp,我正在拨打以下电话
QDBusPendingReply<QList<int> > buddies = pidgin->PurpleFindBuddies(accountId, "email@gmail.com");
buddies.waitForFinished();
if ( buddies.isError() ) {
qDebug() << buddies.error();
return -1;
}
qDebug() << buddies.argumentAt(0).toList().size();
当我启动程序时,我可以从启用的调试输出中看到我得到了结果,如下所示,但 qDebug() 行打印 0。 我无法弄清楚如何正确检索结果。
QDBusConnectionPrivate(0x138fbc0) got message reply (async): QDBusMessage(type=MethodReturn, service=":1.135", signature="ai", contents=([Argument: ai {859}]) )
我错过了什么? 任何协助将不胜感激。
所以显然一切都配置正确。 但是,在尝试检索数据时,而不是执行以下操作:
qDebug() << buddies.argumentAt(0).toList().size();
我应该一直在做:
qDebug() << QString::number(buddies.value().size());
检索单个 ID
foreach(int id, buddies.value() )
qDebug() << QString::number(id);
// or simply
QList<int> ids = buddies.value();