日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt在线音乐播放器

發布時間:2023/12/10 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的Qt在线音乐播放器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。