我仍然不习惯使用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的确切规格
答案 0 :(得分:1)
方法名称为 GetAccessPoints 。
虽然您的错误是:
org.freedesktop.DBus.Error.UnknownMethod 带签名的方法“GetAccessPoint” “”在界面上 “org.freedesktop.NetworkManager.Device.Wireless” 不存在
突出显示“GetAccessPoint”。因此,您可能在代码中拼错了方法名称,尽管您在此处粘贴的代码使用了正确的方法名称,也许您修复了它并忘记重建或清理项目?
答案 1 :(得分:1)
我遇到了同样的问题,但后来我注意到只有当我在有线设备上调用GetAccessPoints
方法时才会发生这种情况。确保设备是无线设备(即DeviceType
等于NM_DEVICE_TYPE_WIFI
),一切都应该正常。
答案 2 :(得分: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
不是特定设备(无线设备)的正确路径。
答案 3 :(得分:-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 !!!";
}
希望这会有所帮助。