我正在尝试使用以下代码连接到ObjectManager的InterfacesAdded信号:
UDisks::UDisks(QObject *parent) : QObject(parent), disks(UD_SERVICE,
UD_PATH, UD_INTERFACE_OBJECT_MANAGER, QDBusConnection::systemBus())
{
qDBusRegisterMetaType<InterfaceList>();
qDBusRegisterMetaType<ManagedObjectList>();
connect(&disks, SIGNAL(InterfacesRemoved(QDBusObjectPath, QStringList)), this, SLOT(mediaRemoved(QDBusObjectPath, QStringList)));
connect(&disks, SIGNAL(InterfacesAdded(QDBusObjectPath, InterfaceList)), this, SLOT(mediaAdded(QDBusObjectPath,InterfaceList)));
}
当我运行代码时,它会出现以下错误:
QObject::connect: No such signal org::freedesktop::DBus::ObjectManager::InterfacesAdded(QDBusObjectPath, InterfaceList)
这是InterfaceList的typedef:
typedef QMap<QString, QMap<QString, QVariant>> InterfaceList;
答案 0 :(得分:1)
通过调试QtDBusViewer,我能够通过使用以下代码找到问题的解决方案:
QDBusConnection connection(QDBusConnection::systemBus());
connection.connect(UD_SERVICE, UD_PATH, UD_INTERFACE_OBJECT_MANAGER, "InterfacesAdded", this, SLOT(mediaAdded(QDBusObjectPath,InterfaceList)));
事实证明我需要使用QDbusConnection类创建与信号的连接,而不是使用QObject的连接方法。