2016-06-07 3 views
5

Я хочу постоянно играть в фоновую музыку в цикле до конца игры.играть музыку в петлю Qt

в заголовочном файле:

QMediaPlayer * music = new QMediaPlayer(); 

в файле CPP:

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

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

Сейчас моя музыка играет через до конца, но не перезагружается. Как я могу заставить его снова зациклиться? Есть ли член QMediaPlayer, который я могу использовать, или мне нужно запустить его в цикле while или что?

+0

Используйте QMediaPlaylist для этого, как сказано в ответе p4plus2. Или попробуйте работать с сигналом 'mediaStatusChanged'. Вы можете подключить его к слоту, который проверяет статус «QMediaPlayer :: EndOfMedia», а затем снова начинает воспроизведение. ... Но предпочитайте QMediaPlaylist. :) – Bugfinger

ответ

10

Звучит так, как вы хотите, QMediaPlaylist. QMediaPlaylist позволяет вам управлять режимом воспроизведения, и в этом случае вы должны использовать Loop. Этот подход имеет и другие преимущества, такие как CurrentItemInLoop. CurrentItemInLoop будет воспроизводить текущий элемент плейлиста в цикле, что означает, что если вы добавите больше песен в будущем, вы сможете выбрать песню, а затем зациклировать только эту дорожку. Таким образом, для большинства потребностей вам нужен только один плейлист. Ниже приведен пример кода, в настоящее время у меня нет средств для его тестирования (на этом компьютере не установлены мультимедийные расширения Qt). Должен продемонстрировать точку достаточно хорошо, хотя.

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

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