我正在使用QtDbus,我需要处理DBus信号。我这样做是通过将DBus的信号连接到Qt插槽,如下所示:
bool res = QDBusConnection::systemBus().connect(kBusName, adapterPath, kInterfaceName,
QLatin1String("PropertiesChanged"),
this, SLOT(_handlePropertyChange(const QString &, PropertiesList , const QStringList &)));
现在,由于在一个Qt插槽中处理多个DBus设备信号,我想发送一些额外的信息(设备的地址,我在连接的情况下)与此信号。
在Qt5风格的连接中,可以使用lambdas执行类似的操作:
quint64 address;
bool res = QDBusConnection::systemBus().connect(kBusName, adapterPath, kInterfaceName,
QLatin1String("PropertiesChanged"),
this, [address, this](const QString & arg1, PropertiesList arg2, const QStringList &arg3) {
_handlePropertyChange(const QString & arg1, PropertiesList arg2, const QStringList &arg3, address)
}); //just an example of lambda connection, won't compile
但QDBusConnection没有Qt5风格的连接,我理解这一点,因为这些连接是动态的。
所以问题是:如何将附加参数捆绑到每个QDBusConnection :: connect()?
理想情况下,我希望能够做到这样的事情:
quint64 address;
bool res = QDBusConnection::systemBus().connect(kBusName, adapterPath, kInterfaceName,
QLatin1String("PropertiesChanged"),
this, SLOT(_handlePropertyChange(const QString &, PropertiesList , const QStringList &, quint64 adr = address /* bundle address here */)));