更多完整QT视频资料、文档视频、学习路线图等领取q君羊:487707667
QMediaPlayer 一个播放器的好东西,这个例子非常简单,可以对mp3 、 mp4 、 wmv文件进行播放,MP3的功能还是比较简单的,下面一起看看这个mp3的功能吧:
运行的界面:
此例子结合了添加文件,删除文件,清空列表,下一曲,上一曲,暂停,stop,音量的控制,运行条的控制。实现MP3的基本功能模块。
下面来看下页面的布局吧:
界面布局非常简单,下面我们来看看代码吧:
首先要在你的工程文件中加上:
QT += multimedia
这样你才可去写对应的东西
对应的头文件:
#ifndef MAINWINDOW_H#define MAINWINDOW_H #include <QMainWindow>#include <QMediaPlayer>#include <QMediaPlaylist> namespace Ui {class MainWindow;} class MainWindow : public QMainWindow{ Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: //自定义槽函数 void onStateChanged(QMediaPlayer::State state); void onPlaylistChanged(int position); void onDurationChanged(qint64 duration); void onPositionChanged(qint64 position); void on_btnAdd_3_clicked(); void on_btnRemove_3_clicked(); void on_btnClear_3_clicked(); void on_listWidget_2_doubleClicked(const QModelIndex &index); void on_sliderVolumn_2_valueChanged(int value); void on_btnSound_2_clicked(); void on_btnPlay_2_clicked(); void on_btnPause_2_clicked(); void on_btnStop_2_clicked(); void on_sliderPosition_2_valueChanged(int value); void on_btnPrevious_2_clicked(); void on_btnNext_2_clicked(); private: QMediaPlayer *player; //播放器 QMediaPlaylist *playList; //播放列表 QString durationTime;//总长度 QString positionTime;//当前播放到位置. private: Ui::MainWindow *ui;}; #endif // MAINWINDOW_H
对应的cpp文件详细说明:
主函数的初始化:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); player = new QMediaPlayer(this); playList = new QMediaPlaylist(this); playList->setPlaybackMode(QMediaPlaylist::Loop); player->setPlaylist(playList); //循环模式 connect(player,SIGNAL(stateChanged(QMediaPlayer::State)), this,SLOT(onStateChanged(QMediaPlayer::State))); connect(player,SIGNAL(positionChanged(qint64)), this,SLOT(onPositionChanged(qint64))); connect(player,SIGNAL(durationChanged(qint64)), this, SLOT(onDurationChanged(qint64))); connect(playList,SIGNAL(currentIndexChanged(int)), this, SLOT(onPlaylistChanged(int))); }
解析:
onStateChanged()在播放器播放状态变化时发射 ,以更新界面上的“播放”“ 暂停” “ 停止”按钮的便能状态。
onPlaylistChanged()。在播放列表的当前文件变化时发射,用以更新界面上显示当前媒体文件名。
onDurationChanged () 在文件时长变化时发射,用 于更新界面上文件时间长度的显示。
onPositionChanged() 在当前文件播放位置变化时发射,用于更新界面上的播放进度显示。
对应的4个函数:
void MainWindow::onStateChanged(QMediaPlayer::State state){ //播放器状态变化,更新按钮状态 ui->btnPlay_2->setEnabled(!(state == QMediaPlayer::PlayingState)); ui->btnPause_2->setEnabled(state == QMediaPlayer::PlayingState); ui->btnStop_2->setEnabled(state == QMediaPlayer::PlayingState);} void MainWindow::onPlaylistChanged(int position){ //播放列表变化,更新当前播放文件名显示 ui->listWidget_2->setCurrentRow(position); QListWidgetItem *item = ui->listWidget_2->currentItem(); if(item) { ui->LabCurMedia_2->setText(item->text()); //显示当前的的音乐 }} void MainWindow::onDurationChanged(qint64 duration){ //文件时长变化,更新进度显示 ui->sliderPosition_2->setMaximum(duration); int secs =int (duration/1000); //秒 int mins =secs / 60; //分钟 secs=secs % 60;//余数秒 durationTime = QString::asprintf("%d:%d",mins,secs); ui->LabRatio_2->setText(positionTime+"/"+durationTime);} void MainWindow::onPositionChanged(qint64 position){ //当前文件播放位置变化,更新进度显示 if (ui->sliderPosition_2->isSliderDown()) return; ui->sliderPosition_2->setSliderPosition(position); int secs =int (position/1000); //秒 int mins =secs / 60; //分钟 secs=secs % 60;//余数秒 durationTime = QString::asprintf("%d:%d",mins,secs); ui->LabRatio_2->setText(positionTime+"/"+durationTime);}
下面是播放列表的控制:
添加文件:
void MainWindow::on_btnAdd_3_clicked(){ //添加文件 QString curPath = QDir::homePath(); //获取系统当前目录 QString dlgTitle = "选择音频文件"; //对话框标题 QString filter = "音频文件(*.mp3 *.wav *.wma);;mp3文件(*.mp3);;wav文件(*.wav);;wma文件(*.wma);;所有文件(*.*)"; //文件过滤 QStringList fileList = QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter); //添加多个 if(filter.count() < 1) { return; } for (int i = 0;i<fileList.count();i++) { QString aFile = fileList.at(i); playList->addMedia(QUrl::fromLocalFile(aFile));//添加文件 QFileInfo fileInfo(aFile); ui->listWidget_2->addItem(fileInfo.fileName());//添加到界面文件列表 } if(player->state()!= QMediaPlayer::PlayingState) { playList->setCurrentIndex(0); } player->play();}
移除文件:
void MainWindow::on_btnRemove_3_clicked(){ //移除一个文件 int pos = ui->listWidget_2->currentRow(); //获取当前选中的行 QListWidgetItem *item = ui->listWidget_2->takeItem(pos); delete item; if(playList->currentIndex()==pos) //当删除的是当前播放的音乐 { int nextPos=0; if (pos>=1) nextPos=pos-1; playList->removeMedia(pos); if(ui->listWidget_2->count() > 0) { playList->setCurrentIndex(nextPos); onPlaylistChanged(nextPos); } else { player->stop(); ui->LabCurMedia_2->setText("无曲目"); } } else { playList->removeMedia(pos); }}
清空列表:
void MainWindow::on_btnClear_3_clicked(){ //清空列表 playList->clear(); ui->listWidget_2->clear(); player->stop();}
QMEDIAPLAYLIST 类的常用函数:
addMedia()函数添加一个文件;
removeMedia()移除一个文件;
setCurrentlndex ()设置当前播放文件序号;
clear()清空播放列 表。
在界面上的 listWidget 里双击一个条目时, 切换到播放这个文件:
void MainWindow::on_listWidget_2_doubleClicked(const QModelIndex &index){ int rowNo = index.row(); //获取当前行 playList->setCurrentIndex(rowNo); //选择当前双击的位置 player->play();}
播放、 暂停或停止播放器 , 只需调用 QMediaPlayer 相应函数即可
void MainWindow::on_btnPlay_clicked(){//播放 if (playlist->currentIndex()<0) playlist->setCurrentIndex(0); player->play();} void MainWindow::on_btnPause_clicked(){//暂停播放 player->pause();} void MainWindow::on_btnStop_clicked(){//停止播放 player->stop();}
播放状态变化时会发射 stateChanged()信号, 在关联的自定义槽函数 onStateChanged()里执行的函数:
void MainWindow::on_sliderVolumn_valueChanged(int value){//调整音量 player->setVolume(value);} void MainWindow::on_btnSound_clicked(){//静音控制 bool mute=player->isMuted(); player->setMuted(!mute); if (mute) ui->btnSound->setIcon(QIcon(":/images/images/volumn.bmp")); else ui->btnSound->setIcon(QIcon(":/images/images/mute.bmp"));}
控制进度:
void MainWindow::on_sliderPosition_2_valueChanged(int value){ //文件进度调控 player->setPosition(value);}
上一曲,下一曲:
void MainWindow::on_btnPrevious_2_clicked(){ //前一文件 playList->previous();//前一个} void MainWindow::on_btnNext_2_clicked(){ //下一文件 playList->next(); //后一个文件}
更多完整QT视频资料、文档视频、学习路线图等领取q君羊:487707667
版权声明:本文为weixin_42126427原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42126427/article/details/106622208
- 更多完整QT视频资料、文档视频、学习路线图等领取q君羊:487707667
- 更多完整QT视频资料、文档视频、学习路线图等领取q君羊:487707667