一、 让MPlayer自动读取我们不断添加的列表,也就是一边添加MPlayer可以一边读,形成动态播放列表。把添加在QT界面中的播放列表的歌曲名字写到一个文件中形成一个播放列表,每添加一首歌曲都换行,每首歌曲占一行,方便后面读取,这样QT界面中的歌曲列表在更新的时候与之对应的播放列表文件也随着更新,这样播放列表能够动态了。然后在第一次往播放列表里添加歌曲的时候调用readFile()函数,读取播放列表文件中的第一行,把获得的歌曲名字传给player()函数,然后player()函数使用QProcess调用MPlayer并把歌曲名字给它就可以播放了。然后就是QProcess调用MPlayer播放完歌曲后是不是应该有一个finished信号发出?如果有的话使用这个信号和readFile()函数连接,每当MPlayer播放完成后就调用readFile()函数进行读取播放列表文件中的下一行的歌曲名,然后readFile()函数再调用player()函数,这样就实现了自动读取列表播放了。其中readFile()函数中开头先判断QProcess是不是正在被调用,如果正在被调用则关闭QProcess再读取歌曲名,然后传递给player()函数,player()函数只管用QProcess调用就行了,这样就避免了不能重复调用而且系统提示QProcess正在运行的错误警告。readFile()函数只有两种情况下被调用,一种是QProcess调用MPlayer后歌曲播放结束后调用redaFile()函数,含有一种是用户发出下一首的指令后也调用readFile()函数,这样readFile()函数就强行关闭QProcess,然后读取播放列表文件中的下一行的歌曲名字,然后再调用player()函数,这样就实现了下一首的功能!另外就是这个播放列表文件还可以使用数据库表的形式,这样的话读取和存储可能会更加方便和快捷一些,因为我们程序中已经使用了数据库。
二、 如果QProcess调用MPlayer播放完歌曲后如果没有finished信号发出的话,我们就是用另外一种方法来判断MPlayer是否播放结束。当首次向播放列表里添加文件时还是调用readFile()函数,读取播放列表文件中第一行,把获得的歌曲文件名传递给player()函数,然后player()函数开始是用QProcess调用MPlayer播放歌曲文件,同时是用process->write("get_time_length/”);
QString time(process->readLine());
timer->start(time);
这样每当载入一次文件就获得它的的总时间长度,并且同时是用QTimer开始计时,当放完成后QTimer会有一个timeout信号发出,使这个信号和readFile()函数连接,这样就也能实现自动播放列表了,下一首对应的函数依然是readFile(),强行结束当前的QProcess重新使用QProcess调用MPlayer播放列表中的下一首歌曲(也就是播放列表文件中的下一行中的歌曲文件名,或者是数据库中播放列表中的下一条记录)。
最后,不管是动态播放列表,还是手动下一首切换播放,其中的列表都是在文件或者数据库中进行,都是调用readFile()函数进行读取列表文件中的下一首。(思路:不管是文件播放完还是手动切换下一首,势必都要读取播放列表文件中的下一首,把要播放的歌曲文件名传递给player()函数,然后player()函数关闭当前QProcess(就是关闭它所调用的外部程序),重新使用QProcess调用MPlayer并把歌曲文件名传递给MPlayer,MPlayer就可以播放了,然后再使用函数获取当前载入文件的总长度,使用QTimer开始计时,直到歌曲播放结束,QTimer发出timeout信号,槽函数readFile()进行响应,开始读取播放列表文件中的下一首歌曲,这样就形成了循环,也就是自动播放列表。)。