1. 程式人生 > >[嵌入式Linux專案實戰開發]基於QT4.7.4的音樂播放器實現與設計【2018年給力專案】

[嵌入式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老師 微訊號歡迎一起交流!(有任何問題都可以問我,隨時解答問題。)

 
##########################################################