4

整数の配列を返すはずのサービス呼び出しから値を取得するのが困難です。インターフェース xml ファイルのメソッド呼び出しは、次のように定義されています。

<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@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}]) )

私は何が欠けていますか?どんな援助でも大歓迎です。

4

1 に答える 1

2

したがって、明らかにすべてが正しく構成されました。ただし、次のことを行う代わりに、データを取得しようとすると、次のようになります。

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();
于 2012-07-11T04:13:13.577 に答える