# 高级用法(Advanced Techniques) ## 10.5.1 实现一个播放列表(Implementing a Playlist) 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(); } } } ```