【问题标题】:NetworkManager and Qt ProblemNetworkManager 和 Qt 问题
【发布时间】:2011-05-28 15:43:40
【问题描述】:

我仍然是使用 Qt4/Dbus 的新手,我正在尝试使用 Qt API 获取访问点列表以发送/接收 Dbus 消息。 我收到以下错误:

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的确切规格

【问题讨论】:

  • 使用d-feet之类的工具检查NetworkManager运行实例的dbus接口。

标签: c++ qt qt4 dbus


【解决方案1】:

方法名称是GetAccessPoints

虽然你的错误是:

org.freedesktop.DBus.Error.UnknownMethod 带有签名的方法“GetAccessPoint” 界面上的“” “org.freedesktop.NetworkManager.Device.Wireless” 不存在

突出显示 “GetAccessPoint”。因此,您可能在代码中拼错了方法名称,尽管您在此处粘贴的代码使用了正确的方法名称,也许您已修复它并忘记重建或清理项目?

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,但后来我注意到它只发生在我在 有线 设备上调用 GetAccessPoints 方法时。确保设备是无线设备(即DeviceType 等于NM_DEVICE_TYPE_WIFI),并且一切正常。

    【讨论】:

      【解决方案3】:

      我修改它并为我工作

      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 不是特定设备(无线设备)的正确路径。

      【讨论】:

        【解决方案4】:
        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 !!!";
        }
        

        希望这会有所帮助。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        相关资源
        最近更新 更多