Qt使用QMediaplayer类做音频播放器

刚刚看了下,已经有一个月没有写博客了,今天没事,用Qt做了一个很小的音频播放器。实现了基本功能,界面没有美化,难看的我都有点不忍心了。言归正传,说说体会和具体实现吧。
在Qt4的时候,Qt集成了一种作为音频方面的模块-phonon,而在Qt5实现后,Qt将phonon删除了,同时,又有了Qmediaplayer类来实现音频的播放。

1、定义两个类的指针,QMediaplayer和QMediaplayList指针,并将列表播放的模式设置为基本的循环模式。

 playList=new QMediaPlaylist;
 playList->setPlaybackMode(QMediaPlaylist::Loop);
 player=new QMediaPlayer;
 player->setPlaylist(playList);

2、打开文件,并将音频文件添加到播放列表里面

 QString initialName=QDir::homePath();
 QStringList pathList=QFileDialog::getOpenFileNames(this, tr("选择文件"), initialName, tr("*.mp3","*wmv"));
 for(int i=0; iif(!path.isEmpty())
     {
         playList->addMedia(QUrl::fromLocalFile(path));
         QString fileName=path.split("\\").last();
         ui->listWidget->addItem(fileName);
     }
 }

3、双击列表时可以播放

ui->label->setText( ui->listWidget->currentItem()->text() );
qDebug()<listWidget->currentIndex().row();
playList->setCurrentIndex( ui->listWidget->currentIndex().row() );
player->play();
ui->btn_start->setText(tr("PASUE") );

4、快进、和歌曲长度

//调节快进后,音乐播放也快进
void m_player::slot_setPosition(int value)
{
    player->setPosition(value);
}
//调节快进
void m_player::slot_positionChanged(qint64 position)
{
    ui->horizontalSlider->setValue(position);
}
//获取歌曲的长度,并设置长度
void m_player::slot_durationChanged(qint64 duration)
{
    ui->horizontalSlider->setRange(0,duration);
}

5、播放和暂停

switch (player->state())
{
    case QMediaPlayer::PlayingState:
        player->pause();
        break;
    default:
        player->play();
        break;
 }

6、创建右键菜单,可以选择播放模式

m_pContextMenu = new QAction(this);
m_pContextMenu->setSeparator(true);
addAction( ui->m_pActionCurrentItemInLoop);
addAction(ui->m_pActionLoop);
addAction(ui->m_pActionRandom);
addAction(ui->m_pActionSequential);
setContextMenuPolicy(Qt::ActionsContextMenu);

7、播放上一首和下一首

void m_player::on_btn_last_clicked()
{
    int currentIndex=playList->currentIndex();
    if(--currentIndex<0) currentIndex=0;
    playList->setCurrentIndex(currentIndex);
    player->play();
}

void m_player::on_btn_next_clicked()
{
    int currentIndex=playList->currentIndex();
    if(++currentIndex==playList->mediaCount()) currentIndex=0;
    playList->setCurrentIndex(currentIndex);
    player->play();
}

8、切歌后显示也要变化

QListWidgetItem *item = ui->listWidget->item(value);
item->setSelected(true);
ui->label->setText(item->text());

具体代码http://download.csdn.net/detail/tax10240809163com/9517835

你可能感兴趣的:(Qt)