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音乐播放器”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注主机评测网网站,小编会继续努力为大家带来更多实用的文章!


上一篇:Python如何实现考试自动答题功能

下一篇:基于C++如何编写一个文章生成器


Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器