2010-12-21 94 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