amarok d-bus 信号 StatusChange (参照: https://xmms2.org/wiki/MPRIS#StatusChange ) に接続しようとしています。インターフェイスと構造体は問題ありません。同じインターフェイスで単純な信号 CapsChange(int) に接続でき、GetStatus dbus メソッドでステータスを取得できるため、このマーシャル構造体は問題ありません。
struct AmarokStatus {
int st1;
int st2;
int st3;
int st4;
};
Q_DECLARE_METATYPE(AmarokStatus)
qDBusRegisterMetaType<AmarokStatus>();
しかし、呼び出すとき:
mInf = new QDBusInterface("org.mpris.MediaPlayer2.amarok", "/Player",
"org.freedesktop.MediaPlayer", QDBusConnection::sessionBus(),this);
connect(mInf, SIGNAL(StatusChange(AmarokStatus)), this, SLOT(statusChanged(AmarokStatus)));
connect(mInf, SIGNAL(CapsChange(int)), this, SLOT(capsChange(int)));
メッセージを受け取りました:
Object::connect: そのような信号はありません org::freedesktop::MediaPlayer::StatusChange(AmarokStatus)
SIGNAL(StatusChange(struct)) および SIGNAL(StatusChange(QDbusargument)) および他のタイプで試しましたが、同じメッセージです
D-Feet は、StatusChange の定義は、StatusChange(Struct of (Int32, Int32, Int32, Int32)) であり、dbus-monitor と同じであると言っています。信号 TrackChange(構造体の配列) と同じ問題。だから私は間違いなく connect() メソッドで何かをいじっています。