c ++ Qt DBus没有这样的信号InterfacesAdded

时间:2016-01-08 15:57:04

标签: c++ qt

我正在尝试使用以下代码连接到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;

1 个答案:

答案 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的连接方法。