2016-06-07 16 views
5

Chcę odtwarzać muzykę w tle w pętli, dopóki gra się nie skończy.odtwarzanie muzyki w tle w pętli Qt

w pliku nagłówkowym:

QMediaPlayer * music = new QMediaPlayer(); 

w pliku cpp:

startGame(){ 
    music->setMedia(QUrl("qrc:/sounds/backgroundmusic.mp3")); 
    music->play(); } 

    stopGame(){ 
    music->stop(); } 

Teraz moja muzyka odgrywa thru do końca, ale nie restart. Jak mogę go ponownie uruchomić w pętli? Czy mogę użyć elementu QMediaPlayer, czy powinienem go uruchomić w pętli while?

+0

Użyj QMediaPlaylist do tego, jak podano w odpowiedzi p4plus2. Lub spróbuj poradzić sobie z sygnałem 'mediaStatusChanged'. Możesz podłączyć go do gniazda, które sprawdza status 'QMediaPlayer :: EndOfMedia', a następnie ponownie rozpoczyna odtwarzanie. ... Ale wolisz QMediaPlaylist. :) – Bugfinger

Odpowiedz

10

Brzmi tak, jak chcesz: QMediaPlaylist. QMediaPlaylist umożliwia sterowanie trybem odtwarzania iw tym przypadku można użyć Loop. To podejście ma również inne zalety, takie jak CurrentItemInLoop. CurrentItemInLoop odtworzy bieżący element listy odtwarzania w pętli, co oznacza, że ​​jeśli dodasz więcej utworów w przyszłości, możesz wybrać utwór, a następnie zapętlić tylko ten utwór. Dlatego potrzebujesz tylko jednej listy odtwarzania dla większości potrzeb. Poniżej znajduje się przykładowy kod, nie mam obecnie możliwości przetestowania go (nie ma zainstalowanych rozszerzeń multimedialnych Qt na tym komputerze). Powinien jednak zadowalająco pokazać ten punkt.

QMediaPlaylist *playlist = new QMediaPlaylist(); 
playlist->addMedia(QUrl("qrc:/sounds/backgroundmusic.mp3")); 
playlist->setPlaybackMode(QMediaPlaylist::Loop); 

QMediaPlayer *music = new QMediaPlayer(); 
music->setPlaylist(playlist); 
music->play();