Seite 1 von 1

[solved]QTDbus - amarok vs PropertiesChanged

Verfasst: 16. Mai 2011 22:28
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

Verfasst: 17. Mai 2011 20:51
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