2012-06-23 3 views
3

정수 배열을 반환해야하는 서비스 호출에서 값을 가져 오는 데 어려움이 있습니다.QDbus : Return to 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 다음 방법을 생성한다 : 상기 인터페이스 XML 파일의 메소드 호출로 정의

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() 라인있어 결과를 올바르게 검색하는 방법을 알 수 없습니다.

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()); 

개별 ID를 검색하려면

foreach(int id, buddies.value()) 
    qDebug() << QString::number(id); 
// or simply 
QList<int> ids = buddies.value();