2

我正在使用 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 */)));
4

0 回答 0