网络管理器和Qt问题

3

我对使用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;
    }

出了什么问题?我的命名是正确的,而且我正在遵循来自这里的精确规范。


使用类似 d-feet 的工具来检查运行中的 NetworkManager 实例的 dbus 接口。 - Pavel Šimerda
4个回答

1

该方法名为GetAccessPoints

而您的错误是:

org.freedesktop.DBus.Error.UnknownMethod 接口"org.freedesktop.NetworkManager.Device.Wireless"上没有带有签名""的方法"GetAccessPoint"

请注意"GetAccessPoint"。因此,您可能在代码中拼写了方法名,尽管您在此处粘贴的代码使用了正确的方法名,但您可能已经修复了它并忘记了重新构建或清理项目?


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 !!!";
}

希望这能有所帮助。

从我的git更多项目中获取。https://github.com/stoic1979/QtDbusNetworkManager - Navjot Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接