[solved]QTDbus - amarok vs PropertiesChanged

Alles rund um die Programmierung mit Qt
Antworten
XMath
Beiträge: 2
Registriert: 15. Mai 2011 21:39

[solved]QTDbus - amarok vs PropertiesChanged

Beitrag von XMath »

Hallo zusammen,
ich versuche verzweifelt das Signal PropertiesChanged von amarok zu "fangen".

amarok füllt das Signal wie folgt:

Code: Alles auswählen

QVariantMap map;
        Q_FOREACH( const QByteArray &name, m_changedProperties )
            map.insert( name, property( name.data() ) );
        m_changedProperties.clear();

        QDBusMessage msg = QDBusMessage::createSignal( MPRIS2_OBJECT_PATH, FDO_PROPERTIES_INTERFACE, "PropertiesChanged" );
        QVariantList args = QVariantList()
            << MPRIS2_PLAYER_INTERFACE
            << map
            << QStringList();
        msg.setArguments( args );
        QDBusConnection::sessionBus().send( msg );
Und ich versuche es zu "fangen":

Code: Alles auswählen

public slots:
    void statusChange(const QVariantList &);
private:
    QDBusInterface *m_amarokPlayerDbus;

Code: Alles auswählen

m_amarokPlayerDbus = new QDBusInterface( "org.mpris.MediaPlayer2.amarok", "/org/mpris/MediaPlayer2", "");

bool connStat =      QDBusConnection::sessionBus().connect("org.mpris.MediaPlayer2.amarok",
                                                              "/org/mpris/MediaPlayer2/Player",
                                                              "org.freedesktop.DBus.Properties",
                                                              "PropertiesChanged",
                                                              this,
                                                              SLOT(statusChange(const QVariantList & )) );
Laut connStat konnte die Verbindung auch erstellt werden. Allerdings kommt das Signal niemals in der entsprechenden Funktion an.
Mit Python habe ich es leicht hinbekommen und vermute, dass es an der Liste der Attribute liegt.

Hoffe auf Mithilfe
Matthias
Zuletzt geändert von XMath am 17. Mai 2011 20:51, insgesamt 1-mal geändert.
XMath
Beiträge: 2
Registriert: 15. Mai 2011 21:39

Beitrag von XMath »

Hallo,
nach etwas weiteren Probieren und unter Nutzung von qdbusviewer habe ich nun die richtige Kombination gefunden.
Sie lautet:

Code: Alles auswählen

QDBusConnection::sessionBus().connect("org.mpris.MediaPlayer2.amarok",
                                                            "/org/mpris/MediaPlayer2",
                                                            "org.freedesktop.DBus.Properties",
                                                            "PropertiesChanged",
                                                            this,
                                                            SLOT(statusChange(const QString& ,
                                                                                         const QMap<QString, QVariant>& ,
                                                                                         const QStringList& )) );
Hoffe das hilft jedem, der mal versucht das Signal PropertiesChanged zu verwenden. Die Dokumentation ist ja leider teilweise sehr mau.

VG
Matthias
Antworten