QtDbus を使用しており、DBus シグナルを処理する必要があります。DBus の信号を次のように Qt スロットに接続することでこれを行っています。
bool res = QDBusConnection::systemBus().connect(kBusName, adapterPath, kInterfaceName,
QLatin1String("PropertiesChanged"),
this, SLOT(_handlePropertyChange(const QString &, PropertiesList , const QStringList &)));
ここで、1 つの Qt スロットで複数の DBus デバイスの信号が処理されるため、この信号で追加情報 (接続の時点で持っているデバイスのアドレス) を送信したいと思います。
Qt5 スタイルの接続では、ラムダを使用して次のようなことを行うことができます。
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 */)));