[嵌入式Linux專案實戰開發]基於QT4.7.4的音樂播放器實現與設計【2018年給力專案】
[嵌入式Linux專案實戰開發]基於QT4.7.4的音樂播放器實現與設計【2018年給力專案】是【創科之龍】團隊aiku嵌入式視訊教程系列製作的現有的音樂播放器。
主要功能實現:
1.新建工程,基類選擇Qwidget。雙擊開啟介面檔案,在介面檔案中建立label顯示時間、若干個toolbutton按鈕和一個listWidget列表顯示歌曲列表。點選“檔案”->“新建”建立QT資原始檔,在工程目錄下建資料夾“images”, 雙擊QT資原始檔新增字首“/”,再新增圖示檔案。
2.單擊上一曲按鈕,在屬性欄設定標題tooltip和圖示icon:
介面如下:
執行程式最後效果如下:
程式碼如下:
3.右鍵幾個按鈕,轉入槽函式,列表和歌詞的訊號選擇clicked(bool)。
4.工程檔案中新增語句
QT += phonon
對音樂播放器進行設計,主要用到模組中的MediaObject (管理媒體源) AudioOutput (連線物理裝置)SeekSlider(實現進度條)QList (實現播放列表 )
大概地說, Phonon 的工作機制是使用 MediaObject 來管理 MediaSource 即原始檔,通過 Path 連線到 AudioOutput ,最後是由AudioOutput 將資料傳送到相關物理裝置。
5.修改widget.h標頭檔案
在widget.h標頭檔案新增語句:
#include <phonon>
在標頭檔案宣告變數:
private:
Phonon::MediaObject *audio;//管理媒體源
Phonon::MediaObject *musicInformationMediaObject;//
Phonon::VideoWidget *videoWidget;//
Phonon::AudioOutput *audioOutput;//連線物理裝置
Phonon::SeekSlider *seekSlider;//實現進度條
Phonon::VolumeSlider *volumeSlider;//音量調節
QList<Phonon::MediaSource> sourceList;//播放列表
QTimer *timer;
QIcon *iconplay;
QIcon *iconpause;
QAction *play;
QAction *stop;
QAction *open;
QAction *sound;
QAction *exit;
QAction *remove;
標頭檔案宣告函式:
public:
void creatActions();//建立動作
6.修改widget.cpp檔案
建構函式新增:
this->setWindowTitle(tr("音樂播放器"));//設定標題
/**初始化媒體**/
audio =new Phonon::MediaObject();//媒體物件
audio->setTickInterval(1);
audioOutput = new Phonon::AudioOutput(Phonon::VideoCategory);//音訊輸出
Phonon::createPath(audio,audioOutput);//連線媒體物件與音訊輸出
musicInformationMediaObject = new Phonon::MediaObject(this); //音樂資訊物件
volumeSlider = new Phonon::VolumeSlider(audioOutput,this); //音量滑動條
volumeSlider->move(190,100);
volumeSlider->resize(50,20);
volumeSlider->setStyleSheet("background-color:rgb(255,255,255,100)");
volumeSlider->setFixedWidth(100);//固定音量條大小
seekSlider = new Phonon::SeekSlider(audio,this); //進度滑動條
seekSlider->move(10,35);
seekSlider->resize(170,20);
seekSlider->setStyleSheet("background-color:rgb(255,255,255,100)");
creatActions();
函式定義:
//播放/暫停
void Widget::on_toolButton_playpause_clicked()
{
if(sourceList.isEmpty())
{
//QMessageBox::information(this, tr("no music files"), tr("no files to play"));
return ;
}
audio->setQueue(sourceList);//列表迴圈
if(audio->state() == Phonon::PlayingState)
audio->pause();
else
{
audio->play();
}
}
//停止播放
void Widget::on_toolButton_stop_clicked()
{
audio->stop();
}
void Widget::on_toolButton_open_clicked()
{
QStringList files = QFileDialog::getOpenFileNames(this, tr("Selec Files to play"));
// 使用 QFileDialog 的 getOpenFileNames 方法獲取若干個音樂檔案,
QString file;
foreach(file, files)// 使用 Qt 中的 foreach 遍歷每個選中的檔案,將其新增到播放列表中。
{
ui->listWidget->addItem(file);
sourceList.append(file);
}
}
void Widget::creatActions()
{
QIcon iconremove(":/images/remove.png");
QIcon iconstop(":/images/gtk-media-stop.png");
QIcon iconopen(":/images/gtk-open.png");
QIcon iconsound(":/images/sound.png");
QIcon iconexit(":/images/exit.png");
iconpause = new QIcon(":/images/gtk-media-pause.png");
iconplay = new QIcon(":/images/gtk-media-play-ltr.png");
remove = new QAction(iconremove,tr("清空播放列表"),this);
connect(remove,SIGNAL(triggered()),this,SLOT(removeSlot()));
play = new QAction(*iconplay,tr("播放"),this);
connect(play,SIGNAL(triggered()),this,SLOT(on_toolButton_playpause_clicked()));
stop = new QAction(iconstop,tr("停止"),this);
connect(stop,SIGNAL(triggered()),audio,SLOT(stop()));
open = new QAction(iconopen,tr("開啟檔案"),this);
connect(open,SIGNAL(triggered()),this,SLOT(on_toolButton_open_clicked()));
sound = new QAction(iconsound,tr("靜音"),this);
sound->setCheckable(true);
connect(sound,SIGNAL(triggered(bool)),audioOutput,SLOT(setMuted(bool)));
exit = new QAction(iconexit,tr("退出"),this);
connect(exit,SIGNAL(triggered()),this,SLOT(exitSlot()));
}
7.在main.cpp檔案中新增中文支援:
#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
8.執行程式,效果如下:
9.到此為止,程式能實現“開啟”、“播放”、“暫停”、“停止”、進度條拉動,聲音調節,靜音功能。下一步工作是完善其他功能及歌詞顯示。
##########################################################
程式碼下載網盤:(免費下載學習)
第一期視訊教程
連結:https://pan.baidu.com/s/1YAnAQVaIlnc2k1pkKzCCBg 密碼:4gu6
第二期視訊教程
接:https://pan.baidu.com/s/1QoyABxf6J1o6mtA8hjaa3Q 密碼:7z01
第三期視訊教程
連結:https://pan.baidu.com/s/1Jj6jqBQZC0CABW1kOqZU6A 密碼:ox0l
##########################################################
歡迎廣大學子交流嵌入式和安卓開發
aiku老師 微訊號 :aiku868
微信公眾平臺:aiku嵌入式視訊教程創科之龍
aiku老師QQ:1653687969
技術解答QQ群:234945702
aiku老師 微訊號歡迎一起交流!(有任何問題都可以問我,隨時解答問題。)
##########################################################