Qt 5 multimedia接口沒有提供播放列表。幸好,它非常容易實現。通過設置模型子項與MediaPlayer元素可以實現它,如下所示。當playstate通過player控制時,Playlist元素負責設置MediaPlayer的source。
Playlist {
id: playlist
mediaPlayer: player
items: ListModel {
ListElement { source: "trailer_400p.ogg" }
ListElement { source: "trailer_400p.ogg" }
ListElement { source: "trailer_400p.ogg" }
}
}
MediaPlayer {
id: player
}
Playlist元素的第一部分如下,注意使用setIndex函數來設置source元素的索引值。我們也實現了next與previous函數來操作鏈表。
Item {
id: root
property int index: 0
property MediaPlayer mediaPlayer
property ListModel items: ListModel {}
function setIndex(i)
{
console.log("setting index to: " + i);
index = i;
if (index < 0 || index >= items.count)
{
index = -1;
mediaPlayer.source = "";
}
else
mediaPlayer.source = items.get(index).source;
}
function next()
{
setIndex(index + 1);
}
function previous()
{
setIndex(index + 1);
}
讓播放列表自動播放下一個元素的訣竅是使用MediaPlayer的status屬性。當得到MediaPlayer.EndOfMedia狀態時,索引值增加,恢復播放,或者當列表達到最後時,停止播放。
Connections {
target: root.mediaPlayer
onStopped: {
if (root.mediaPlayer.status == MediaPlayer.EndOfMedia)
{
root.next();
if (root.index == -1)
root.mediaPlayer.stop();
else
root.mediaPlayer.play();
}
}
}