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("http://iwxyi.com: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("https://music.163.com/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文庫https://download.csdn.net/download/qq_45367445/86394844?spm=1001.2014.3001.5503
總結
- 上一篇: 前端学习(1676):前端系列实战课程之
- 下一篇: 泛微OA7.0下载7.1下载