在上一期中我们实现了搜索歌曲,那么这一期我们来实现播放他。
添加歌曲:
既然要添加歌曲,实质上就是添加文件,我们要找到他的路径,文件名称,在判断文件是否存在等操作,最后在添加加进去。
void MainWindow::on_pushButton_Add_clicked()
{
//获取当前目录路径-主文件目录
QString strCurrenrPath=QDir::homePath();
QString strDilTittle="请选择MP3文件";
//文件过滤器
QString strFilters="所有文件(*.*);;音频文件(*.mp3);;mp3文件(*.mp3)";
QStringList strMp3list=QFileDialog::getOpenFileNames(this,strDilTittle,strCurrenrPath,strFilters);
if(strMp3list.count()<1){
return;
}
for (int i=0;i<strMp3list.count();i++) {
//获取到音乐列表里面的MP3文件
QString strFiles=strMp3list.at(i);
//将MP3文件添加到多媒体播放列表里面
P_Playerlist->addMedia(QUrl::fromLocalFile(strFiles));
QFileInfo qFileInfo(strFiles);//获取文件信息
//将歌曲添加到plaintextedit里面
ui->plainTextEdit_MusicList->appendPlainText(qFileInfo.fileName());
}
//添加完毕-立即播放
if(P_PlayerObject->state()!=QMediaPlayer::PlayingState){
P_Playerlist->setCurrentIndex(0);
}
P_PlayerObject->play();
ipos=1;
}
最后几句:添加完毕之后立即播放,可加可不加。
本段代码就是通过函数获取文件路径,文件名称,再通过文件过滤器找到对应格式的文件,再根据这些内容获取到MP3歌曲列表,再通过for循环,逐个添加到歌曲列表当中。
ipos=1;表示播放状态,我们通过刚开始定义的这个状态来判断歌曲是否在播放。
播放:
//播放歌曲
void MainWindow::on_pushButton_play_clicked()
{
//如果停止状态,或暂停状态--直接播放
if(ipos==0){
P_PlayerObject->play();
ipos=1;
}else if(P_Playerlist->currentIndex()<0){
P_Playerlist->setCurrentIndex(0);
}
P_PlayerObject->play();
}
暂停:
void MainWindow::on_pushButton_pause_clicked()
{
//如果是播放--改为暂停
if(ipos==1){
P_PlayerObject->pause();
ipos=0;
}
}
停止:
void MainWindow::on_pushButton_stop_clicked()
{
P_PlayerObject->stop();
ipos=0;
}
注意:及时修改ipos的值,以防遗漏导致按钮失效
上一曲,下一曲:
//上一曲
void MainWindow::on_pushButton_pre_clicked()
{
int m_index=P_Playerlist->currentIndex();
int m_indexSum=P_Playerlist->mediaCount();
if(m_index>0){
m_index-=1;
P_Playerlist->setCurrentIndex(m_index);
P_PlayerObject->play();
}else{
m_index=m_indexSum-1;
P_Playerlist->setCurrentIndex(m_index);
P_PlayerObject->play();
}
}
首先获取当前歌曲列表的位置,再进行判断,如果位置等于零,就说明在第一个歌曲位置,那么继续上一曲的话,就该到了最后一曲的位置,根据歌曲的位置即使改变m_index的值。
下一曲的话刚好相反,如果歌曲位置是最后一个的话,继续下一曲就应该是第一个歌曲:
void MainWindow::on_pushButton_next_clicked()
{
int m_index=P_Playerlist->currentIndex();
int m_indexSum=P_Playerlist->mediaCount();
if(m_index==m_indexSum){
m_index=0;
P_Playerlist->setCurrentIndex(m_index);
P_PlayerObject->play();
}else{
m_index+=1;
P_Playerlist->setCurrentIndex(m_index);
P_PlayerObject->play();
}
}
接着就该到了音量图标的变化,静音的时候 是一个图标,非静音的时候又是一个。
音量图标变化:
//实现静音状态图标变化
void MainWindow::on_pushButton_Mute_clicked()
{
bool isMutexState=P_PlayerObject->isMuted();
P_PlayerObject->setMuted(!isMutexState);
if(isMutexState){
ui->pushButton_Mute->setIcon(QIcon(":/new/Images/sound.png"));
}else{
ui->pushButton_Mute->setIcon(QIcon(":/new/Images/mute.png"));
}
}
很简单,就是判断静音还是非静音,修改相应图标就好了。
进度条变化:
我们选中进度条->转到槽,找到这个valueChanged(int) 就可以了,两个进度条操作是一样的。
//音量控制
void MainWindow::on_horizontalSlider_Volume_valueChanged(int value)
{
P_PlayerObject->setVolume(value);
}
//播放歌曲进度
void MainWindow::on_horizontalSlider_Play_valueChanged(int value)
{
P_PlayerObject->setPosition(value);
}
直接调用系统接口就能实现。
感谢阅读!!!!