2012-06-23 7 views
3

Я столкнулся с трудностями при извлечении значений из служебного вызова, который должен возвращать массив целых чисел. Вызов метода в файле интерфейса XML определяется следующим образом:QDbus: возврат службы QList <int>

<method name="PurpleFindBuddies"> 
    <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QList&lt;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 файл. И в main.cpp, я делаю следующий вызов

QDBusPendingReply<QList<int> > buddies = pidgin->PurpleFindBuddies(accountId, "[email protected]"); 
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}])) 

Что мне не хватает? Будем очень благодарны любой помощи.

ответ

1

Таким образом, очевидно, что все было правильно настроено. Однако, при попытке извлечь данные, а не делать:

qDebug() << buddies.argumentAt(0).toList().size(); 

я должен был делать:

qDebug() << QString::number(buddies.value().size()); 

Чтобы получить индивидуальные идентификаторы

foreach(int id, buddies.value()) 
    qDebug() << QString::number(id); 
// or simply 
QList<int> ids = buddies.value(); 
Смежные вопросы