2

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 */)));
4

0 に答える 0