首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >qdbus -无法用struct参数连接dbus信号

qdbus -无法用struct参数连接dbus信号
EN

Stack Overflow用户
提问于 2013-12-20 21:54:52
回答 1查看 960关注 0票数 2

我试图连接到阿莫克d总线信号StatusChange (参考:https://xmms2.org/wiki/MPRIS#StatusChange)。接口和结构是可以的,因为我可以连接到同一个接口中的简单信号CapsChange(int),并且可以通过GetStatus dbus方法获得状态,所以这个马歇尔结构是可以的:

代码语言:javascript
复制
struct AmarokStatus {
    int st1;
    int st2;
    int st3;
    int st4;
};

Q_DECLARE_METATYPE(AmarokStatus)
qDBusRegisterMetaType<AmarokStatus>();

但打电话时:

代码语言:javascript
复制
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)));

我收到消息:

对象:连接:没有这样的信号org::freedesktop::MediaPlayer::StatusChange(AmarokStatus)

我尝试过使用SIGNAL(StatusChange(struct))和SIGNAL(StatusChange(QDbusargument))和其他类型,但是使用相同的消息。

StatusChange的定义是:StatusChange(结构(Int32,Int32)),与dbus监视器相同.信号TrackChange(结构阵列)也存在同样的问题。因此,我肯定是在用connect()方法破坏一些东西。

EN

回答 1

Stack Overflow用户

发布于 2022-09-27 19:07:23

有两种选择:

  1. 确保实现QDBusAbstractInterface的发射器定义了所连接的信号。这个解决方案有点干净。

  1. 使用QDBusConnection::connect连接到匿名信号。这个解决方案在紧要关头起作用,但根据我的经验,它可能特别容易出错:
代码语言:javascript
复制
if (!QDBusConnection::systemBus().connect("org.mpris.MediaPlayer2.amarok", "/Player", "org.freedesktop.MediaPlayer", "StatusChange", this, SLOT(statusChanged(AmarokStatus)))) {
    qWarning() << "Failed to connect";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20712546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档