生活随笔
收集整理的這篇文章主要介紹了
QT下的音乐播放器 (一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
確定基本功能
基本功能包括:
1.播放
2.上一首/下一首
3.靜音
4.播放方式
5.進度條
6.添加音樂
7.顯示歌曲的表格
實現方式:
首先,我們需要幾個控件(pushbutton,listwidget,slider,label);
界面如下:
此圖片,大家可以先不把這些東西全部寫上去,
先把我寫的功能加上就可以。
我們一個一個來:
1.添加音樂
QMediaPlaylist
* playlist
;
QString curPash
=QDir
::currentPath();QString dlgTitle
="選擇音頻文件";QString filter
="音頻文件(*.mp3 *.wav *.wma)mp3文件(*.mp3);;wav文件(*.wav);;wma文件(*.wma);;所有文件(*.*)";QStringList fileList
= QFileDialog
::getOpenFileNames(this,dlgTitle
,curPash
,filter
);if(fileList
.count()<1)return;for(int i
= 0;i
<fileList
.count();i
++){QString aFile
= fileList
.at(i
);playlist
->addMedia(QUrl
::fromLocalFile(aFile
));QFileInfo
fileInfo(aFile
);ui
->listWidget
->addItem(fileInfo
.fileName());}if(player
->state()!=QMediaPlayer
::PlayingState
){playlist
->setCurrentIndex(m_Value
);}player
->setPlaylist(playlist
);
這個過程中,一定要注意在構造函數中,將播放器和播放列表new出來,并設置基本格式。
2.播放音樂
QMediaPlayer
* player
;
bool m_IsPause
= true;if(m_IsPause
==true){ui
->pushButton_3
->setStyleSheet("border-image: url(:/kjt/bf.png);");m_IsPause
= false;player
->pause();return;}m_IsPause
= true;ui
->pushButton_3
->setStyleSheet("border-image: url(:/kjt/1zantingtingzhi.png);");player
->play();
這里要注意一點:當播放的時候和暫停的時候,圖標的顏色應當有改變,所以加了一個狀態判斷。
3.上一首/下一首
int m_Value
=0;int m_Amount
=0;
void musicplaywindow
::on_pushButton_2_clicked()
{m_Amount
= playlist
->mediaCount();if(m_Value
== 0){m_Value
=m_Amount
;playlist
->setCurrentIndex(m_Value
);if(m_IsPause
==true){player
->play();}return;}playlist
->setCurrentIndex(--m_Value
);if(m_IsPause
==true){player
->play();}
}
void musicplaywindow
::on_pushButton_4_clicked()
{m_Amount
= playlist
->mediaCount();if(m_Value
== m_Amount
){m_Value
=0;playlist
->setCurrentIndex(m_Value
);if(m_IsPause
==true){player
->play();}return;}playlist
->setCurrentIndex(++m_Value
);if(m_IsPause
==true){player
->play();}
}
這個要注意:我們在上一首下一首的過程中,肯定要知道當前是第幾首,為了能夠在第一首和最后一首的時候可以循環一次進行,我們需要通過總歌曲數量進行判斷。
4.聲音
聲音有兩種表現形式:
一種是直接按小喇叭,一種是進度條的拖動
bool m_IsVolume
= false;void musicplaywindow
::on_pushButton_6_clicked()
{if(m_IsVolume
==true){m_IsVolume
= false;ui
->pushButton_6
->setStyleSheet("border-image: url(:/kjt/shengyin.png);");player
->setVolume(ui
->horizontalSlider_2
->value());return;}m_IsVolume
= true;ui
->pushButton_6
->setStyleSheet("border-image: url(:/kjt/jingyin.png);");player
->setVolume(0);
}void musicplaywindow
::on_horizontalSlider_2_valueChanged(int value
)
{player
->setVolume(value
);
}
進度條的拖拽此處是用了值改變,所以拖動過程就會改變聲音的大小。
5.播放方式
int m_IsMode
;
if(m_IsMode
== 0){ui
->pushButton_5
->setStyleSheet("border-image: url(:/kjt/danqu.png);");m_IsMode
++;playlist
->setPlaybackMode(QMediaPlaylist
::Sequential
);return;}if(m_IsMode
== 1){ui
->pushButton_5
->setStyleSheet("border-image: url(:/kjt/xunhuan.png);");m_IsMode
++;playlist
->setPlaybackMode(QMediaPlaylist
::Loop
);return;}if(m_IsMode
== 2){ui
->pushButton_5
->setStyleSheet("border-image: url(:/kjt/danquxunhuan.png);");m_IsMode
++;return;}if(m_IsMode
== 3){ui
->pushButton_5
->setStyleSheet("border-image: url(:/kjt/suiji.png);");m_IsMode
=0;playlist
->setPlaybackMode(QMediaPlaylist
::Random
);return;}
單曲循環并沒有實現,后續實現了會在后續說明。
6.播放進度條
connect(player
,SIGNAL(positionChanged(qint64
)),this,SLOT(onPositionChanged(qint64
)));connect(player
,SIGNAL(durationChanged(qint64
)),this,SLOT(onDurationChanged(qint64
)));void musicplaywindow
::onDurationChanged(qint64 duration
)
{ui
->horizontalSlider
->setMaximum(duration
); int secs
= duration
/1000; int mins
= secs
/60;secs
= secs
% 60;durationTime
= QString
::asprintf("%d:%d",mins
,secs
);ui
->label
->setText(positionTime
+"/"+durationTime
);
}void musicplaywindow
::onPositionChanged(qint64 position
)
{if(ui
->horizontalSlider
->isSliderDown())return;ui
->horizontalSlider
->setSliderPosition(position
);int secs
= position
/1000;int mins
= secs
/60;secs
= secs
% 60;positionTime
= QString
::asprintf("%d:%d",mins
,secs
);ui
->label
->setText(positionTime
+"/"+durationTime
);
}void musicplaywindow
::on_horizontalSlider_valueChanged(int value
)
{player
->setPosition(ui
->horizontalSlider
->value());
}
這里要注意幾點:
1.獲取歌曲總時長,從而獲取進度條長度,以及label的總時長
2.獲取當前歌曲時長,從而獲取進度條當前值,以及label的時長。
3.positionChanged是播放器持續時間的更改(播放器當前時間變化時觸發)
4.durationChanged是播放器總時間的更改(時長發生變化時觸發)
總結
以上是生活随笔為你收集整理的QT下的音乐播放器 (一)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。