2015-03-11 10 views
1

Я планирую разработать приложение, которое будет использовать DBus и connman, диспетчер беспроводной связи для встроенных устройств. Из моего понимания DBus раскрывает методы, используемые программой, и позволяет разработчикам также использовать эти методы в своей собственной программе.Извлеките аргументы и путь объекта D-Bus динамически из метода GetService net.connman.Manager

Я знаю, что Qt имеет модуль QtDbus, и если мое понимание верное, метод GetServices в интерфейсе net.connman.Manager показывает доступные беспроводные сети. Проверяя вывод метода GetServices из программы qdbusviewer, я вижу, что каждая беспроводная сеть имеет свой собственный уникальный путь объекта, примером может быть /net/connman/service/wifi_00120ec15ba0_4c616964614d616774616c6173_managed_psk.

Чтобы использовать метод Connect и Disconnect под интерфейсом net.connman.Services, мне нужен путь к объекту, чтобы я мог создать новый интерфейс, который позволит мне вызвать Connect/Disconnect. Я сейчас пытаюсь методы, описанные здесь How do I extract the returned data from QDBusMessage in a Qt DBus call?, но я только получаю пустой, когда я пытаюсь вернуть путь объекта:

Вот мой код, чтобы получить путь к объекту:

QDBusConnection bus = QDBusConnection::systemBus(); 
QDBusInterface *interface = new QDBusInterface("net.connman", 
               "/", 
               "net.connman.Manager", 
               bus,            
               this); 

QDBusMessage test = interface->call("GetServices"); 
QList<QVariant> outArgs = test.arguments(); 

QVariant first = outArgs.at(0); 
qDebug() << first; 

QDBusVariant dbvFirst = first.value<QDBusVariant>(); 

QVariant vFirst = dbvFirst.variant(); 
qDebug() << vFirst; 

QDBusArgument dbusArgs = vFirst.value<QDBusArgument>(); 
qDebug() << "QDBusArgument current type is" << dbusArgs.currentType(); 

QDBusObjectPath path; 
dbusArgs.beginArray(); 
while (!dbusArgs.atEnd()) 
{ 
    dbusArgs >> path; 
} 

dbusArgs.endArray(); 
qDebug() << path.path(); 

Как извлечь аргументы и путь объекта, возвращаемые методом GetService? Кто-нибудь сделал это правильно? Я новичок в Qt и программировании, поэтому любая помощь будет оценена.

Благодаря

ответ

0

Это может быть поздно, но надеюсь, что это может помочь другим. Я не уверен в возвращаемом типе вашего вызова (в dbus его a (oa {sv})), но я попытался использовать QArrayOfPathProperties. Таким образом, используя код, возвращаемый тип из test.arguments() будет:

QArrayOfPathProperties outArg; 

И извлечение может быть, как это:

for (int row = 0; row < outArg.size(); ++row) { 
    QMap<QString,QVariant> map = outArg.at(row).properties; 
    // for example you can extract the value like this: 
    auto serviceName = map.value("Name");  
}