Jak wyodrębnić zwrócone dane z QDBusMessage w wywołaniu Qt DBus?
Próbuję wywołać interfejs DBus suplikanta WPA przy użyciu biblioteki klas QDBus Qt. W szczególności próbuję użyć wywołania właściwości „Get”, aby pobrać wartość właściwości „Interfejsy”.
Specyfikacja DBus (przez introspekcję) dla „Get” to:
<interface name="org.freedesktop.DBus.Properties">
<method name="Get">
<arg name="interface" type="s" direction="in"/>
<arg name="propname" type="s" direction="in"/>
<arg name="value" type="v" direction="out"/>
</method>
...
</interface>
Wydaje się dość prosty. Dwa wejścia ciągów i wyjście to wariant (są to typy DBus). Dla właściwości „Interfejsy” oczekuję, że wariant będzie tablicą ścieżek obiektów (typ DBus „ao”).
używamQDBusInterface::call()
wywołać metodę DBus, która zwraca aQDBusMessage
, ale nie wiem, jak wydobyć z tego dane.
QDBusMessage::arguments()
zwraca aQList<QVariant>
. Próbowałem różnych konwersji elementów na tej liście, próbując znaleźć moją tablicę ścieżek obiektów, ale wydaje mi się, że zamiast tego kończy się pustym łańcuchem.
QVariant::type()
wygląda na to, że powinien pomóc, ale wydaje się, że zwraca tylko typQDBusMessage
, co jest wyraźnie błędne. Na przykład:
// 'message' is of type QDBusMessage
qDebug() << "Argument 0 type is" << message.arguments().at(0).type();
wydruki:
Argument 0 type is QVariant::QDBusMessage
Jak wyodrębnić rzeczywiste dane wiadomości?