2010-12-21 41 views
3

我還是使用Qt4/Dbus的新手,我正在嘗試使用Qt API獲取acccess points列表以發送/接收Dbus消息。 我得到了以下錯誤:NetworkManager和Qt問題

org.freedesktop.DBus.Error.UnknownMethod 
Method "GetAccessPoint" with signature "" on interface "org.freedesktop.NetworkManager.Device.Wireless" doesn't exist 

的代碼是:

QStringList *netList = new QStringList(); 
    QDBusConnection sysbus = QDBusConnection::systemBus(); 
    QDBusInterface callNM("org.freedesktop.NetworkManager","/org/freedesktop/NetworkManager","org.freedesktop.NetworkManager.Device.Wireless",sysbus); 
    if(callNM.isValid()) 
    { 
     QDBusMessage query= callNM.call("GetAccessPoints"); 
     if(query.type() == QDBusMessage::ReplyMessage) 
     { 

      QDBusArgument arg = query.arguments().at(0).value<QDBusArgument>(); 
      arg.beginArray(); 
      while(!arg.atEnd()) 
      {     
       QString element = qdbus_cast<QString>(arg); 
       netList->append(element); 
      } 
      arg.endArray(); 
     }else{ 
      std::cout<< query.errorName().toStdString() << std::endl; 
      std::cout<< query.errorMessage().toStdString() << std::endl; 
     } 
     int x= netList->size(); 
     for(int y=0; y< x ;y++) 
     { 
      widget.avail_nets->addItem(netList->at(y)); // just print it to my gui from the stringlist array 
     } 

    }else{ 
      std::cout<<"fail" << std::endl; 
    } 

哪些錯誤我的命名是正確的,我下面從here

+0

使用類似d-feet的工具來檢查NetworkManager運行實例的dbus接口。 – 2014-04-26 18:14:04

回答

1

的確切規格的方法名是GetAccessPoints

當你的錯誤是:在「GetAccessPoint」

org.freedesktop.DBus.Error.UnknownMethod Method "GetAccessPoint" with signature "" on interface "org.freedesktop.NetworkManager.Device.Wireless" doesn't exist

亮點。因此,您可能拼寫錯了代碼中的方法名稱,儘管您在此處粘貼的代碼使用了正確的方法名稱,可能是您修復了它,並忘記重建或清理該項目?

1

我有同樣的問題,但後來我發現只有當我在有線設備上調用GetAccessPoints方法時纔會發生。確保設備是一個無線設備(即DeviceType等於NM_DEVICE_TYPE_WIFI),並且一切都應該正常工作。

0

我修改這個和對我的作品

QDBusInterface callNM("org.freedesktop.NetworkManager","/org/freedesktop/NetworkManager/Devices/0","org.freedesktop.NetworkManager.Device.Wireless",sysbus); 

,其結果是

"/org/freedesktop/NetworkManager/AccessPoint/2" 
"/org/freedesktop/NetworkManager/AccessPoint/1" 

我覺得/org/freedesktop/NetworkManager不是爲特定設備(無線設備)正確的路徑。

-1
QDBusInterface dbus_iface("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/Devices/0", "org.freedesktop.NetworkManager.Device.Wireless", bus); 

QDBusMessage query = dbus_iface.call("GetAccessPoints"); 

if(query.type() == QDBusMessage::ReplyMessage) { 

    QDBusArgument arg = query.arguments().at(0).value<QDBusArgument>(); 
    arg.beginArray(); 
    while(!arg.atEnd()) { 
     QString element = qdbus_cast<QString>(arg); 
     netList->append(element); 
     showAccessPointProperties(element); 
    } 
    arg.endArray(); 
} else { 
    qDebug() << "got dbus error: " << query.errorName(); 
    qDebug() << "check the parameters like service, path, interface and method name !!!"; 
} 

希望這會有所幫助。

+0

現在添加代碼片段。試試這個吧! – 2017-03-14 19:50:56

+0

從我的git more proj。 https://github.com/stoic1979/QtDbusNetworkManager – 2017-03-14 19:51:56