1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Qt音乐播放器

Qt音乐播放器

时间:2022-07-22 19:04:18

相关推荐

Qt音乐播放器

效果图片展示

1. 本地音乐播放和暂停

2. 在线音乐搜索播放

3. 通过拖动进度条改变播放进度

1.实现播放

private:Ui::Widget *ui;QMediaPlayer *player; //播放者QString musicpath;//本地音乐路径bool isplay=false;//bool类型的播放判断变量

#include <QMediaPlayer>

Qt播放音乐时要添加播放者,需要添加QMediaPlayer这个头文件,还需要在要得在项目文件(.pro)中加入:QT += multimedia network。QString对象用于保存需要打开的本地文件路径。bool变量用于判断歌曲是否正在播放,将用在播放函数中。

2.读取本地音乐文件

通过QFileDialog 打开需要播放的歌单文件,并将其加入到·播放列表中。

void Widget::readMusicfile(){musicpath = QFileDialog::getExistingDirectory();QDir dir(musicpath);QStringList nameFileters;nameFileters<<"*.mp3";QStringList files=dir.entryList(nameFileters,QDir::Files|QDir::Readable,QDir::Name);musiclist->addItems(files);musiclist->sortItems();currentmusic->setText(musiclist->item(0)->text());player->setMedia(QUrl::fromLocalFile(musicpath+'/'+musiclist->item(0)->text()));player->setVolume(50);currentvolume->setText("50");volumeprogress->setSliderPosition(50);player->stop();}

3.音乐播放和暂停

音乐的播放和暂停通过同一个控件来控制,利用bool变量来判断当前音乐是否处在播放状态。

void Widget::playpause_clicked(){if(isplay){this->player->pause();this->isplay=false;}else{this->player->play();this->isplay=true;}}

4.通过滑杆来调节播放进度

通过滑杆的位置来计算出播放的时间进度,并显示出来。

void Widget::player_positionChanged(qint64 position){if(this->timeprogress->isSliderDown()){return;}timeprogress->setSliderPosition(position);int secs=position/1000;int mins=secs/60;secs=secs%60;this->currenttime->setText(QString::asprintf("%02d:%02d",mins,secs));if(player->position()==player->duration() && player->position()!=0 && player->duration()!=0){nextsong_clicked();}}

5.进度条的总长度

void Widget::player_durationChanged(qint64 duration){timeprogress->setMaximum(duration);int secs=duration/1000;int mins=secs/60;secs=secs%60;this->durationstime->setText(QString::asprintf("%02d:%02d",mins,secs));}

6.上一首和下一首

void Widget::lastsong_clicked(){int currentrow=musiclist->currentRow();int rowcout=musiclist->count();musiclist->setCurrentRow((currentrow-1+rowcout)%rowcout);}void Widget::nextsong_clicked(){int currentrow=musiclist->currentRow();int rowcount=musiclist->count();musiclist->setCurrentRow((currentrow+1)%rowcount);}

7.音量调节

void Widget::volumeprogress_valueChanged(int value){player->setVolume(value);currentvolume->setText(QString::asprintf("%d",value));}

8.音乐播放列表

创建了一个QListWidget对象来展示歌单播放,可以点击歌单上的歌曲进行切换播放。

void Widget::musiclist_Changed(int currentrow){currentmusic->setText(musiclist->item(currentrow)->text());player->setMedia(QUrl::fromLocalFile(musicpath+'/'+musiclist->item(currentrow)->text()));player->setVolume(volumeprogress->value());player->play();this->isplay=true;}

9.在线歌曲搜索

这里采用通过http访问搜索的方式,访问的是网易云api。

void Widget::search_clicked(){QNetworkRequest request;request.setUrl(QString(":3000/search?keywords=%0").arg(song->text()));request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded; charset=UTF-8");request.setHeader(QNetworkRequest::UserAgentHeader, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36");http_acc->get(request);}void Widget::recv_ack(QNetworkReply *r){data=r->readAll();QJsonParseError err;QJsonDocument json=QJsonDocument::fromJson(data,&err);if(err.error!=QJsonParseError::NoError){qDebug()<<"err"<<err.errorString();return;}QJsonObject object=json.object();QStringList keys=object.keys();if(keys.contains("result")){QJsonObject result=object["result"].toObject();QStringList rkeys=result.keys();if(result.contains("songs")){QJsonArray arr=result["songs"].toArray();for(auto i:arr){QJsonObject object_1=i.toObject();musicId=object_1["id"].toInt();music_duration=object_1["duration"].toInt();musicname=object_1["name"].toString();mId=object_1["mvId"].toInt();a=mId;QStringList artistsKeys = object.keys();if(artistsKeys.contains("artists")){QJsonArray artistsArray = object["artists"].toArray();for(auto j : artistsArray){QJsonObject object_2 = j.toObject();singername = object_2["name"].toString(); // 歌手名}}if(artistsKeys.contains("album")){QJsonObject aObject = object["album"].toObject();aName = aObject["name"].toString(); // 专辑名}qDebug()<<"音乐ID:"+QString::number(musicId);qDebug()<<"音乐名:"+musicname;qDebug()<<"歌手名:"+singername;qDebug()<<"总时长:"+QString::number(music_duration);qDebug()<<"专辑名:"+aName;qDebug()<<"mv的id:"+QString::number(mId);}}}}

10.在线音乐播放

void Widget::onlinePlay(){musiclist->hide();QString url;url=QString("/song/media/outer/url?id=%0").arg(musicId);playlist->addMedia(QUrl(url));player->setPlaylist(playlist); //将playlist设置为当前播放列表player->setMedia(playlist);player->play();player->setVolume(50);currentvolume->setText("50");volumeprogress->setSliderPosition(50);currentmusic->setText(musicname);}

源码链接:

(4条消息) 基于Qt实现的在线音乐播放器-嵌入式文档类资源-CSDN文库/download/qq_45367445/86394844?spm=1001..3001.5503

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。