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; i<pathList.size(); ++i)
 {
     QString path=QDir::toNativeSeparators(pathList.at(i));
     if(!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()<<ui->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

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值