Qt如何实现MP3音乐播放器
这篇文章主要介绍“Qt如何实现MP3音乐播放器”,在日常操作中,相信很多人在Qt如何实现MP3音乐播放器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Qt如何实现MP3音乐播放器”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
音乐播放器逻辑
首先通过打开文件,获取文件夹下mp3文件的名字,将其存入QTableWidget控件下,通过双击QTableWidget空间中的内容,播放相应的mp3音乐文件,同时通过使用QMediaPlaylist来实现上一首,下一首的功能。
效果图
具体实现
widget.h
#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>classQMediaPlayer;classQMediaPlaylist;classQLabel;namespaceUi{classWidget;}classWidget:publicQWidget{Q_OBJECTpublic:explicitWidget(QWidget*parent=nullptr);voidInitWidget();~Widget();privateslots:voidon_pushButton_clicked();voidon_pushButton_5_clicked();voidmusicplayer(int,int);voidon_pushButton_7_clicked();voidon_pushButton_8_clicked();voidon_pushButton_6_clicked(boolchecked);voidvalueChanged(qint64value);voidsetPositon(int);voidupdateDuration(qint64duration);protected:private:voidfindFile(constQString&path,std::vector<QString>&fileNames);Ui::Widget*ui;QStringpath;QMediaPlayer*player;QMediaPlaylist*playlist;intnum_music;intstatus=1;qint64position;};#endif//WIDGET_H
widget.cpp
#include"widget.h"#include"ui_widget.h"#include<QFileDialog>#include<QDebug>#include<QMediaPlayer>#include<QTableWidgetItem>#include<QMouseEvent>#include<QMediaPlaylist>Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){player=newQMediaPlayer(this);playlist=newQMediaPlaylist;ui->setupUi(this);InitWidget();connect(ui->tableWidget,&QTableWidget::cellDoubleClicked,this,&Widget::musicplayer);connect(ui->horizontalSlider,&QSlider::sliderMoved,this,&Widget::setPositon);connect(player,&QMediaPlayer::durationChanged,this,&Widget::updateDuration);connect(player,&QMediaPlayer::positionChanged,this,&Widget::valueChanged);}voidWidget::InitWidget(){ui->label_2->hide();ui->label_3->hide();ui->tableWidget->hide();ui->pushButton_5->hide();ui->pushButton_6->hide();ui->pushButton_7->hide();ui->pushButton_8->hide();ui->horizontalSlider->hide();ui->label_4->hide();}Widget::~Widget(){deleteui;}voidWidget::on_pushButton_clicked(){ui->label_2->show();ui->tableWidget->show();ui->pushButton_5->show();}voidWidget::on_pushButton_5_clicked(){path=QFileDialog::getExistingDirectory(this,"请选择本地音乐文件夹");std::vector<QString>fileNames;findFile(path,fileNames);//设置行数,列数ui->tableWidget->setColumnCount(1);ui->tableWidget->setRowCount(fileNames.size());num_music=fileNames.size();for(inti=0;i<fileNames.size();i++){ui->tableWidget->setItem(i,0,newQTableWidgetItem(fileNames[i]));//设置cell不可编辑QTableWidgetItem*pItem=ui->tableWidget->item(i,0);inteditflag=Qt::ItemIsEditable;pItem->setFlags((Qt::ItemFlag)(~editflag&pItem->flags()));}}staticQStringformatTime(qint64timeMilliSeconds){qint64seconds=timeMilliSeconds/1000;constqint64minutes=seconds/60;seconds-=minutes*60;returnQStringLiteral("%1:%2").arg(minutes,2,10,QLatin1Char('0')).arg(seconds,2,10,QLatin1Char('0'));}voidWidget::musicplayer(introw,intcolumn){QTableWidgetItem*item=newQTableWidgetItem;playlist->clear();player->pause();item=ui->tableWidget->item(row,0);//player->setMedia(QUrl::fromLocalFile(item->text()));for(inti=row;i<num_music;i++){item=ui->tableWidget->item(i,0);playlist->addMedia(QUrl::fromLocalFile(item->text()));}playlist->setCurrentIndex(0);playlist->setPlaybackMode(QMediaPlaylist::Loop);player->setPlaylist(playlist);player->play();ui->label_3->show();ui->pushButton_6->show();ui->pushButton_7->show();ui->pushButton_8->show();ui->horizontalSlider->show();ui->label_4->setText(formatTime(0));ui->label_4->show();}voidWidget::findFile(constQString&path,std::vector<QString>&fileNames){QDirdir(path);//获取path下所有文件夹和文件dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot);//文件夹/文件/不包含./和..///排序文件夹优先dir.setSorting(QDir::DirsFirst);//获取文件夹下所有文件(文件夹+文件)QFileInfoListlist=dir.entryInfoList();if(list.size()==0){return;}//遍历for(inti=0;i<list.size();i++){QFileInfofileInfo=list.at(i);if(fileInfo.isDir()){findFile(fileInfo.filePath(),fileNames);}else{if(fileInfo.suffix()=="mp3"){fileNames.emplace_back(list.at(i).filePath());}}}}voidWidget::on_pushButton_7_clicked(){playlist->next();}voidWidget::on_pushButton_8_clicked(){playlist->previous();}voidWidget::on_pushButton_6_clicked(boolchecked){intstatus1=status%2;//qDebug()<<checked;if(status1==0){player->setPosition(position);player->play();ui->pushButton_6->setIcon(QPixmap("C:/Users/11830/Downloads/4.jpg"));}else{player->pause();position=player->position();ui->pushButton_6->setIcon(QPixmap("C:/Users/11830/Downloads/1.jpg"));}status+=1;}voidWidget::valueChanged(qint64value){ui->horizontalSlider->setValue(value);ui->label_4->setText(formatTime(value));ui->label_3->setText(player->metaData("Title").toString());}voidWidget::setPositon(intvalue){if(qAbs(player->position()-value)>99)player->setPosition(value);//qDebug()<<(value*player->duration()/100);}voidWidget::updateDuration(qint64duration){ui->horizontalSlider->setRange(0,duration);ui->horizontalSlider->setEnabled(duration>0);ui->horizontalSlider->setPageStep(duration/10);}
main.cpp
#include"widget.h"#include<QApplication>intmain(intargc,char*argv[]){QApplicationa(argc,argv);Widgetw;w.show();returna.exec();}
到此,关于“Qt如何实现MP3音乐播放器”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注主机评测网网站,小编会继续努力为大家带来更多实用的文章!
下一篇:基于C++如何编写一个文章生成器
Winxp系统登录密码忘记了如何办?
Winxp系统无法访问工作组如何解决?
WinXP电脑如何取消登录密码?WinXP电脑登录密码取消方法
WinXP系统电脑如何设置密码?
电脑蓝屏代码0x0000007B如何办?电脑蓝屏代码0x0000007B解决办法
电脑蓝屏代码0x0000008E如何办?电脑蓝屏代码0x0000008E解决办法
电脑蓝屏代码0x0000006F如何办?电脑蓝屏代码0x0000006F解决办法
XP系统如何给文件加密
XP系统开机如何进入dos
xp系统如何快速自动修复受损系统文件?