Problem mit Signale und Slots



  • Hi Leute
    Ich möchte folgendes machen.
    Ich habe ein Musikplayer über QMediaPlayer und möchte sobalt sich das lied ändert die MP3Tags auslesen. Das auslesen geht jedoch bekomme ich die Verbindung net hin das dieses Event ausgeführt wird.

    So wie ich es aus meinem Buch gelernt habe kann ich mit QObject::connect arbeiten. Jedoch gehts net.

    Ich habe eine Funktion namens "Auslesen". Diese funktion soll ausgelöst werden sobalt sich das Lied ändert.

    Mein Aktueller Code:
    [code="cpp"]
    QObject::connect(Player, SIGNAL(currentMediaChanged(QMediaContent), ?????????));
    [code]

    PS ich arbeite mit dem neuen QT5 und lerne es durch ein C++ Buch und des QT3 Buch.



  • Du musst in Deiner Klasse eine SLOT anlegen, der zu dem SIGNAL passt, auf dass Du reagieren möchtest.

    Dann, und nur dann, kannst Du den SLOT Deines Objektes mit dem SIGNAL des anderen Objektes verbinden, so dass dieser SLOT fortan immer aufgerufen wird, sobald das entsprechende SIGNAL ausgelöst wurde.

    Im Allgemeinen läuft es also so ab:

    QObject::connect(irgendEinObjekt, SIGNAL(einSignalDesObjektes(argumente)), dasZielObjekt, SLOT(slotDesZielObjektes(argumente)));
    

    Ein konkretes Beispiel könnte so aussehen:

    QObject::connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int)));
    

    Hier, im Beispiel, würde also fortan immer der SLOT "setValue" am Objekt "b" aufgerufen werden, sobald das Objekt "a" das SIGNAL "valueChanged" auslöst. Übergeben wird hier ein einziges Argument, vom Typ "int".

    Ich rate Dir dringend mal diesen Artikel sehr gründlich zu lesen, bevor Du weiter machst:
    http://qt-project.org/doc/qt-4.8/signalsandslots.html



  • tomtombusiness schrieb:

    PS ich arbeite mit dem neuen QT5 und lerne es durch ein C++ Buch und des QT3 Buch.

    Qt3 ist uralt und völlig überholt. Qt4 ist im Vergleich zu Qt3 sehr stark umgebaut worden. Qt5 ist noch teilweise relativ ähnlich zu Qt4. Da gibts das neue QtQuick Zeugs, das mich nicht interessiert, sonst ist aber vieles beim alten geblieben.



  • Das was ich eig meine ist das ich eine funktion deklariert habe aber keinem Element zugewiesen hab. ZB in deinem Beispiel wirde auf ein element desen slot gewiesen jedoch ist mein Slot eine funktion. Verstehste?



  • Nein, wirklich verständlich drückst du dich nicht aus.
    Schuss ins Blaue: du hast eine freie Funktion und willst die aufrufen lassen? Das geht nicht, das Signal/Slot Konzept funktioniert nur Objekten, die von QObject abgeleitet sind und Slots.


  • Mod

    Das ist eigentlich recht einfach mit QMediaPlayer.

    Qt5 Audio Doku:
    http://doc.qt.io/qt-5/audiooverview.html

    Mein Blogbeitrag zu MP3 Player mit Qt5:
    http://www.meetingcpp.com/index.php/br/items/building-an-mp3-player-with-qt5.html

    Signal & Slot: Verstehe nicht ganz wo dein Problem liegt, bzw. ob Mechanics dass nicht längst beantwortet hat...


Anmelden zum Antworten