QT纯代码打造音乐播放器

QT纯代码打造音乐播放器

在.pro文件中添加
QT = prmultimedia
然后就是在.h文件中添加相关库函数
我添加的库函数
有些是不需要的,可以自定义删除修改
我是为方便以后扩展功能就留下来了

#include <QMediaPlayer>//播放器
#include<QMediaPlaylist>//播放列表

#include<QVBoxLayout>//盒子布局
#include<QGridLayout>//网格布局


#include<QPushButton>//按钮
#include<QLabel>//标签
#include<QSlider>//滑块
#include<QLineEdit>//行编辑
#include<QDir>//驱动文件

#include<QListWidget>//文件列表
#include<QFileDialog>//文件目录
#include <QFileInfo>//文件信息
//#include<QListView>//列表视图

#include<QUrl>//链接
#include<QMessageBox>// 消息框
#include <QListWidgetItem>

#include <QDebug>//调试专用库

下面是定义.h相关的信号函数了


private slots:
    //自定义槽函数
    void  onStateChanged(QMediaPlayer::State state);//播放器状态,状况/*在播放器播放状态变化时发射,以更新界面上的播放 暂停 停止按钮的使能状态*/
    void  onPlaylistChanged(int position);//播放器列表位置/*在播放列表的当前文件变化时发射,以更新界面上显示当前媒体文件名*/
    void  onDurationChanged(qint64 duration);//播放器持续,持续时间/*在文件时长变化时发射,用于更新界面上文件长度显示*/
    void  onPositionChanged(qint64 position);//播放器当前位置/*在当前文件播放位置变化时发射,用于更新界面上的播放进度显示*/

    void  on_btnAdd_clicked();//添加按钮函数
    void  on_btnRemove_clicked();//移除函数
    void  on_btnClear_clicked();//清除函数

    void on_btnPlay_clicked(); //播放按钮函数
//    void on_btnPause_clicked();
    void on_btnStop_clicked();//停止函数


    void on_btnNext_clicked();//下一首
    void on_btnPrevious_clicked();//上一首
     void on_btnSound_clicked();//音量图标

    void on_sliderVolumn_valueChanged(int value);//声音调节
    void on_filePosition_valueChanged(int value);//播放进度条


    void on_layoutSwitChing_clicked();//界面切换
    void  on_listWiget_doubleClicked(const QModelIndex &index);//双击函数

    void on_count_currentIndexChanged(int counts);//这个函数还没研究清楚,可以忽略

定义相关对象名称

private:
    Ui::MainWindow *ui;
    void initUi(); // 代码方式初始化界面
    void initSignal();//QT信号装置
//void intui()和 initSignal()这两个函数可以不定义;
//将这在个函数内容写在构造函数里面即可,我是为了分模块便于理解
//特意写成这样子的,可以不相同。不过要注意里面的书写顺序

    QMediaPlayer * player; // 播放器
    QMediaPlaylist * playlist; //播放列表
    QListWidget * listWidget;//列表
    QString durationTime;//总长度
    QString positionTime;//当前播放位置

    QGridLayout *gridLayout;//网格布局
    QVBoxLayout *boxLayout;//盒子布局


    QPushButton * btnPlay;//播放
    //QPushButton * btnPause;//暂停
    QPushButton * btnStop;  //停止
    QPushButton * btnAdd; //添加加
    QPushButton * btnRemove;//移除
    QPushButton * btnClear;//清空
    QPushButton * btnNext;//下一首
    QPushButton * btnPrevious;//上一首
    QPushButton * btnSound;//音量图标
    QPushButton * layoutSwitChing;//布局切换按扭


    QLabel * labCurMedia;//执行列表标签
    QLabel * LabRatio;//时间标签

    QSlider * sliderPosition;//声音滑块
    QSlider * filePosition;//文件滑块


    bool mute;//声音图标切换判定
    bool playPause;//判断播放/暂停
    bool  lSwithChing;//切换判断

    int count; //列表计数
};

以上都是在.h文件书写
下面到了久违的.cpp文件了
第一部分构建文件

void MainWindow::initUi(){
    // 创建播放器主要框架
    player= new QMediaPlayer(this);                         //播放器
    playlist=new QMediaPlaylist(this);                      //播放列表
    playlist->setPlaybackMode(QMediaPlaylist::Loop);        //设计播放列表模式
    /*
     * 播放列表模型参数选择以下
     * PlaybackMode {
     *  CurrentItemOnce,                                    //当前项目一次
     *  CurrentItemInLoop,                                  //循环中的当前项
     *  Sequential,                                         //顺序
     * Loop,                                                //循环
     *  Random                                              //随机
     *  }
    */
    player->setPlaylist(playlist);                         //执行播放列表模式
    player->setVolume(50);                                 //初始播放声音为50
    //以下为按键等非关键零部件初始化设计
    /********************************************************************************/
    lSwithChing=true;                                          //布局切换判断参数
    gridLayout=new QGridLayout(this);                           //网格化模式
    boxLayout=new QVBoxLayout(this);                            //盒子模型(上下模式)
    // ui->centralwidget->setLayout(gridLayout);
    // ui->centralwidget->setLayout(boxLayout);


    mute=true;                                                  //声音图标切换判定
    playPause=true;                                             //播放/暂停按钮判定

    btnPlay=new QPushButton(tr("播放"),this);                    //初始化播放按钮
    btnPlay->setIcon(QIcon(":/images/play.png"));                //初始化播放按钮图标
    btnPlay->setFlat(true);                                      //设计播放按键初始化为真(则是未按下)
    //btnPause=new QPushButton(tr("暂停"),this);                  //初始化暂停按钮
    btnStop=new QPushButton(tr("停止"),this);                     //初始停止按钮
    btnStop->setIcon(QIcon(":/images/stop.png"));                 //初始化停止按钮图标
    btnStop->setFlat(false);                                      //设计停止按键初始化为假(则是按下)
    btnSound=new QPushButton(tr("50"),this);                      //初始化声音图标按钮
    btnSound->setIcon(QIcon(":/images/sound.png"));               //初始化声音图标按钮图标
    btnAdd=new  QPushButton(tr("添加"),this);                      //初始化添加按钮
    btnAdd->setIcon(QIcon(":/images/add.png"));                   //初始添加按钮图标
    btnRemove=new  QPushButton(tr("移除"),this);                   //初始化移除按钮
    btnRemove->setIcon(QIcon(":/images/remove.png"));             //初始移除按钮图标
    btnClear=new  QPushButton(tr("清空"),this);                    //初始化清空按钮
    btnClear->setIcon(QIcon(":/images/empty.png"));               //初始清空按钮图标
    btnPrevious=new  QPushButton(tr("上一曲"),this);               //初始化上一首按钮
    btnPrevious->setIcon(QIcon(":/images/Previous.png"));         //初始化上一首按钮图标
    btnNext=new  QPushButton(tr("下一曲"),this);                   //初始化下一首按钮
    btnNext->setIcon(QIcon(":/images/next.png"));                 //初始化下一首按钮图标

    layoutSwitChing=new QPushButton(tr("布局切换"),this) ;         //初始化布局切换按扭

    listWidget=new QListWidget(this);
    new QListWidgetItem(tr("<<<<<<<<<<<<<<<当前文件列表>>>>>>>>>>>>>>>"), listWidget);



    //初始化窗口列表
   /*listWidget->setMinimumWidth(800);     */                     //设计最小窗口列表宽为800
    labCurMedia= new   QLabel(tr("当前无音乐列表 !!! "),this);       //初始化当前播放文件名称
    sliderPosition =new  QSlider( this);                           //初始化声音滑块
    sliderPosition->setOrientation(Qt::Horizontal);                //设计声音滑块为水平方向
    sliderPosition->setMinimum(0);                                 //设计声音滑块最小值
    sliderPosition->setMaximum(100);                               //设计声音滑块最大值
    sliderPosition->setMinimumWidth(150);                          //设计声音滑块最小宽度
    sliderPosition->setValue(50);                                  //设计声音滑块初始化位置
    filePosition=new  QSlider( this);                              //初始化播放文件进度条滑块
    filePosition->setOrientation(Qt::Horizontal);                  //设计播放文件进度条滑块为水平方向
    // filePosition->setFixedWidth(200);
    filePosition->setMinimumWidth(250);                            //设计播放文件进度条滑块列宽为250
    LabRatio=new QLabel (tr("0:00/0:00"),this);                    //初始化播放文件时间标签


    count=listWidget->currentRow()+2;                                //窗口列表计数

    on_layoutSwitChing_clicked();                                  //初始化界面布局

}

第二部分构造函数信号,也是QT这个软件的核心,为了避免带来不必要的麻烦,建议将此部分代码写在QT构造函数最下面。毕竟编译器的读写是从上到下读取的
废话不多说了,上代码。。。

void MainWindow::initSignal(){

    // 创建播放器信号关键四个关键函数
    //检查信号状态信号
    connect(player,SIGNAL(stateChanged(QMediaPlayer::State)),
            this,SLOT(onStateChanged(QMediaPlayer::State)));

    //检查列表文件当前进度信号
    connect(player,SIGNAL(positionChanged(qint64 )),
            this,SLOT(onPositionChanged(qint64 )));

    //检查文件时长信号
    connect(player,SIGNAL(durationChanged(qint64 )),
            this,SLOT(onDurationChanged(qint64 )));

    //检查播放列表信号
    connect(playlist,SIGNAL(currentIndexChanged(int)),
            this,SLOT( onPlaylistChanged(int )));


    /*******************************************************/
    //列表行数
    //此条信号函数可以忽略。暂时没实现它的强大功能
    connect(listWidget,SIGNAL(currentRowChanged(int)),
            this,SLOT( on_count_currentIndexChanged(int) ));


    
    /*******************************************************/

    //检查窗口列表双击信号
    connect(listWidget,SIGNAL(doubleClicked(const QModelIndex &)),
            this,SLOT(on_listWiget_doubleClicked(const QModelIndex &)));

    /*****************************************************/
    // 创建播放器按钮信号函数
    //添加按钮信号
    connect(btnAdd,SIGNAL(clicked()),
            this,SLOT(on_btnAdd_clicked()));

    //移除按钮信号
    connect(btnRemove,SIGNAL(clicked()),
            this,SLOT(on_btnRemove_clicked()));

    //清除信号
    connect(btnClear,SIGNAL(clicked()),
            this,SLOT(on_btnClear_clicked()));

    //声音信号
    connect(sliderPosition,SIGNAL(sliderMoved(int )),
            this,SLOT(on_sliderVolumn_valueChanged(int )));

    //播放信号
    connect(btnPlay,SIGNAL(clicked()),
            this,SLOT(on_btnPlay_clicked()));

    //暂停信号
    //    connect(btnPause,SIGNAL(clicked()),
    //            this,SLOT(on_btnPause_clicked()));

    //停止信号
    connect( btnStop,SIGNAL(clicked()),
             this,SLOT(on_btnStop_clicked()));

    //下一首信号
    connect( btnNext,SIGNAL(clicked()),
             this,SLOT(on_btnNext_clicked()));

    //上一首信号
    connect( btnPrevious,SIGNAL(clicked()),
             this,SLOT(on_btnPrevious_clicked()));

    //界面切换信号
    connect( layoutSwitChing,SIGNAL(clicked()),
             this,SLOT(on_layoutSwitChing_clicked()));

    /*****************************************************/
    //滑块信号函数
    //声音状态(静音/声音)
    connect( btnSound,SIGNAL(clicked()),
             this,SLOT(on_btnSound_clicked()));

    //文件进程信号
    connect( filePosition,SIGNAL(valueChanged(int)),
             this,SLOT(on_filePosition_valueChanged(int)));

}

以上就是构成函数的全部代码,看着比较多,把多余的空行去掉,
其实也没有多少,下面就是每个功能函数的实现了


 //检查播放器状态
 void MainWindow::onStateChanged(QMediaPlayer::State state)//播放器状态,状况/*在播放器播放状态变化时发射,以更新界面上的播放 暂停 停止按钮的使能状态*/
{
    qDebug()<<tr(">>>检查播放器状态中>>>");
    if(state==QMediaPlayer::StoppedState){
        if((btnPlay->isFlat())&&(btnStop->isFlat())){

            on_btnNext_clicked();

        }
        //下面这个判断我是有点不理解,不过没有它,
        //追求的自动播放下一首不能实现,有兴趣的朋友可以研究一下
        if(!(state==QMediaPlayer::PlayingState)){

            btnPlay->setFlat(true);
            btnPlay->setText("播放");
            btnPlay->setIcon(QIcon(":/images/play.png"));
            playPause =true;
        }

    }
    //    btnPlay->setEnabled(!(state==QMediaPlayer::PlayingState));
    if(state==QMediaPlayer::PlayingState)
    {

        btnPlay->setText("播放");
        btnPlay->setIcon(QIcon(":/images/play.png"));
        playPause =true;
    }else{
        btnPlay->setText("暂停");
        btnPlay->setIcon(QIcon(":/images/pause.png"));
        playPause =false;
    }

    //    btnPause->setEnabled(state==QMediaPlayer::PlayingState);
    btnStop->setEnabled(state==QMediaPlayer::PlayingState);

    //  if(state==QMediaPlayer::StoppedState){

    //  if((btnPlay->isFlat())){

    //     on_btnNext_clicked();
    //     btnPlay->setText("暂停");
    //     btnPlay->setIcon(QIcon(":/images/pause.png"));
    //     playPause =false;
    //  }
    //  }


    qDebug()<<tr(">>>检查播放器状态成功!!!");
}

第二个重要的函数体

  //检查列表文件当前进度信号
void MainWindow::onPositionChanged(qint64 position)//播放器当前位置/*在当前文件播放位置变化时发射,用于更新界面上的播放进度显示*/
{
    qDebug()<<tr(">>>检查播放器列表文件当前进度时间中>>>");
    if(filePosition->isSliderDown())
    {
        return;
    }
    filePosition->setSliderPosition(position);
    int  secs=position/1000;//秒
    int mins =secs/60;//分
    secs=secs%60;//余数秒
    positionTime=QString::asprintf(" %d:%d",mins,secs);
    LabRatio->setText(positionTime+"/"+durationTime);
    playlist->setPlaybackMode(QMediaPlaylist::Loop);
    qDebug()<<tr(">>>检查播放器列表文件当前进度时间成功!!!");
}

第三个函数

void MainWindow::onDurationChanged(qint64 duration)//播放器持续,持续时间/*在文件时长变化时发射,用于更新界面上文件长度显示*/
{
    qDebug()<<tr(">>>检查当前播放文件最大长度中>>>");
    filePosition->setMaximum(duration);
    int  secs=duration/1000;//秒
    int mins =secs/60;//分
    secs=secs%60;//余数秒
    durationTime=QString::asprintf("%d:%d",mins,secs);
    LabRatio->setText(positionTime+"/"+durationTime);
    playlist->setPlaybackMode(QMediaPlaylist::Loop);
    qDebug()<<tr(">>>检查当前播放文件最大长度成功!!!");
}

第四个函数

void MainWindow::onPlaylistChanged(int position)//播放器列表位置/*在播放列表的当前文件变化时发射,以更新界面上显示当前媒体文件名*/
{
    qDebug()<<tr(">>>检查播放器列表位置中>>>");
    listWidget->setCurrentRow(position);
    QListWidgetItem * item =listWidget->currentItem();

    if(item)
    {
        labCurMedia->setText(item->text());
    }
    qDebug()<<tr(">>>检查播放器列表位置成功!!!");
}

这个播放器几乎就是靠这四个函数功能实现了,下面就是各个零部件的构成了,下面就不多废话了,直接复制、粘贴就行了

//以下函数实现零部件函数

//布局函数
void MainWindow::on_layoutSwitChing_clicked()
{
    qDebug()<<">>>检查播切换按钮中>>>";
    if(lSwithChing)
    {
        if(gridLayout)
        {
            // on_btnClear_clicked();
            delete  gridLayout;
        }
//        if(boxLayout==NULL)
//        {
//            boxLayout=new QVboxLayout(this);
//        }
        boxLayout=new QVBoxLayout(this);
        ui->centralwidget->setLayout(boxLayout);
        //注释:这里的addwidget顺序跟布局有关系,越靠上,布局就越靠上面
        boxLayout->addWidget(listWidget );//播放列表
        boxLayout->addWidget(labCurMedia);//当前播放文件标签
        boxLayout->addWidget(LabRatio);//当前文件播放时间
        boxLayout->addWidget(filePosition);//文件 进度
        boxLayout->addWidget(btnAdd);//添加按钮
        boxLayout->addWidget(btnRemove);//移除按钮
        boxLayout->addWidget(btnClear);//清空按钮
        boxLayout->addWidget(btnPrevious);//上一曲按钮
        boxLayout->addWidget(btnPlay);//播放/暂停
        //    boxLayout->addWidget(btnPause);//暂停
        boxLayout->addWidget(btnStop);//停止
        boxLayout->addWidget(btnNext);//下一曲
        boxLayout->addWidget(btnSound);//声音图标
        boxLayout->addWidget(sliderPosition);//声音大小滑块
        /***************************************/
       // boxLayout->addWidget(QListWidget::addItem(btnSound+sliderPosition));//声音大小滑块
        /***************************************/
        boxLayout->addWidget(layoutSwitChing);//布局按钮切换

        lSwithChing=false;

    }
    else
    {
        if(boxLayout)
        {
            // on_btnClear_clicked();
            delete  boxLayout;
        }
//        if(gridLayout==NULL)
//        {
//         gridLayout=new QGridLayout(this);
//        }
        gridLayout=new QGridLayout(this);
        ui->centralwidget->setLayout(gridLayout);
        listWidget->setMinimumWidth(800);
        /****网格布局对齐方式参数****/
        // Constant             Description
        // Qt::AlignLeft        Aligns with the left edge.//左对齐
        // Qt::AlignRight       Aligns with the right edge.//右对齐
        // Qt::AlignHCenter     Centers horizontally in the available space.//水平居中
        // Qt::AlignJustify     Justifies the text in the available space.对可用空间中的文本进行校验
        //****网格布局方式****//
        //参数说明:控件名,行,列,占用行数,占用列数,对齐方式
        //gridLayout->addWidget(btnAdd,1,1,1,1,Qt::AlignHCenter);//
        //******************************************************************************************//


        /**************************************************************************/
  //       listWidget->setMinimumWidth(this->width());
//         listWidget->setMaximumWidth(800);
        //gridLayout->addWidget(listWidget,     2,1,2,5,Qt::AlignLeft );//列表
//         listWidget->setMouseTracking(true);
//                     setMouseTracking(true);
 //         gridLayout->setRowStretch(2,0);
        gridLayout->addWidget(listWidget,       0,1,2,-1,Qt::AlignHCenter);//列表
        /**************************************************************************/
        gridLayout->addWidget(btnAdd,           3,1,1,1,Qt::AlignHCenter);//添加按钮
        gridLayout->addWidget(btnRemove,        3,2,1,1,Qt::AlignHCenter);//移除
        gridLayout->addWidget(btnClear,         3,3,1,1,Qt::AlignHCenter);//清空
        /**************************************************************************/
         gridLayout->addWidget(layoutSwitChing, 3,4,1,1,Qt::AlignHCenter);//布局切换按钮
         gridLayout->addWidget(btnSound,         3,5,1,1,Qt::AlignHCenter);//声音图标
        /**************************************************************************/
        gridLayout->addWidget(btnPrevious,      4,1,1,1,Qt::AlignHCenter);//上一首

        //  gridLayout->addWidget(btnPlay,          4,2,1,1,Qt::AlignHCenter);//播放

        gridLayout->addWidget(btnPlay,          4,2,1,1,Qt::AlignHCenter);//播放

        // gridLayout->addWidget(btnPause,      4,3,1,1,Qt::AlignHCenter);//暂停
        gridLayout->addWidget(btnStop,          4,3,1,1,Qt::AlignHCenter);//停止
        gridLayout->addWidget(btnNext,          4,4,1,1,Qt::AlignHCenter);//下一首

        gridLayout->addWidget( sliderPosition,   4,5,1,1,Qt::AlignHCenter);//声音滑块
      //  gridLayout->addWidget( btnSound,   4,6,1,1,Qt::AlignHCenter);//声音滑块
        /**************************************************************************/
        gridLayout->setRowStretch(4,1);
        gridLayout->addWidget(labCurMedia,      6,1,1,2,Qt::AlignHCenter);//当前播放文件标签
        gridLayout->addWidget(filePosition,     6,3,1,2,Qt::AlignHCenter);//文件进程滑块
        gridLayout->addWidget(LabRatio,         6,5,1,2,Qt::AlignHCenter);// 时长标签


        lSwithChing=true;
    }
    qDebug()<<">>>检查播切换按钮成功>>>";
}

//双击函数
void MainWindow::on_listWiget_doubleClicked(const QModelIndex &index)
{
    qDebug()<<">>>检查列表双击目标中>>>";
    int rowNo=index.row();
    playlist->setCurrentIndex(rowNo);
    player->play();
    btnPlay->setText("暂停");
    btnPlay->setFlat(false);
    btnPlay->setIcon(QIcon(":/images/pause.png"));
    playPause =false;
    btnStop->setFlat(true);
    btnPlay->setFlat(false);
    if( !(btnPlay->isFlat())){
        btnPlay->setText("暂停");
        btnPlay->setIcon(QIcon(":/images/pause.png"));
    }
    qDebug()<<">>>检查播放器列表成功!!!";
}

 /*********************************************************************************/
  //滑块实现函数

  //声音滑块进度条函数
void MainWindow::on_sliderVolumn_valueChanged(int value)
{
    qDebug()<<">>>检查播放器音量滑动中>>>";
    player->setVolume(value);
    btnSound->setText(QString::number(value));

    qDebug()<<"当前检查音量为:"<<value;
    qDebug()<<">>>检查播放器声音量滑动成功!!!";
}

//播放文件进度条函数
void MainWindow::on_filePosition_valueChanged(int value)
{
    qDebug()<<">>>检查播放器进度条成中>>>";
    player->setPosition(value);
    qDebug()<<">>>检查播放器进度条成功!!!";
}

 /*********************************************************************************/

//添加按钮函数
void MainWindow::on_btnAdd_clicked()
{
    qDebug()<<">>>检查播放器添加按钮中>>>";
    QString curPath =QDir::homePath();
    QString digTile="选择音频文件";
    QString filter="音频文件(*.mp3 *.wav *.wma);;mp3文件(*.mp3);;wav文件(*.wav);;wma文件(*.wma);;所有文件(*.*)";
    //    QStringList  flieList=QFileDialog::getOpenFileNames(this,digTile,curPath,filter);
    /**/
    //       QString flieList = QFileDialog::getOpenFileName(this, tr("选择音频文件"),
    //                                                         ".",
    //                                                         tr("音频文件(*.mp3 *.wav *.wma)"));
    QStringList flieList = QFileDialog::getOpenFileNames(this, QStringLiteral("选择音频文件"), curPath,QStringLiteral("图音频文件(*.mp3 *.wav *.wma);;mp3文件(*.mp3);;wav文件(*.wav);;wma文件(*.wma);;所有文件(*.*)"));

    if(filter.count()<1)
    {
        return;
    }
    /*****************************************/
    //listWidget->currentRow();
    for (int i=0;i<flieList.count();i++)
    {
        QString aFlie=flieList.at(i);
        playlist->addMedia(QUrl::fromLocalFile(aFlie));
        QFileInfo fileInfo(aFlie);
        listWidget->QListWidget::addItem(QString::number(count++)+"_"+fileInfo.fileName());
       // listWidget->QListWidget::addItem(QString::number(listWidget->row())+"_"+fileInfo.fileName());
       // currentIndexChanged
    }

    if(player->state()!=QMediaPlayer::PlayingState)
    {
        playlist->setCurrentIndex(0);
    }
    //  player->play();
    qDebug()<<">>>检查播放器添加按钮成功!!!";
}

//移除按扭
void MainWindow::on_btnRemove_clicked()
{
    qDebug()<<">>>检查播放器移除按钮中>>>";
    int pos =listWidget->currentRow();
    QListWidgetItem * item =listWidget->takeItem(pos);
    delete item;
    playlist->removeMedia(pos);
    count--;
    qDebug()<<">>>检查播放器移除按钮成功!!!";
}

//清空按钮
void MainWindow::on_btnClear_clicked()
{
    qDebug()<<">>>检查播放器清空按钮中>>>";
    playlist->clear();
    listWidget->clear();
    player->stop();
    labCurMedia->clear();
    labCurMedia->setText("当前无音乐列表 !!! ");
    count=listWidget->currentRow()+2;
    qDebug()<<">>>检查播放器清空按钮成功!!!";
}

//播放安扭
void MainWindow::on_btnPlay_clicked()
{
    qDebug()<<">>>检查播放器播放按钮中>>>";
    if(playlist->currentIndex()<0)
    {
        playlist->setCurrentIndex(0);
        qDebug()<<">>>检查播放器播放按钮失败!!!!";
        return ;
    }
    if(playPause)
    {
        player->play();
        btnPlay->setText("暂停");
        btnPlay->setIcon(QIcon(":/images/pause.png"));
        btnStop->setFlat(true);
        playPause =false;
    }
    else{
        player->pause();
        btnPlay->setText("播放");
        btnPlay->setIcon(QIcon(":/images/play.png"));
        playPause =true;

    }
    qDebug()<<">>>检查播放器播放按钮成功!!!";
}
//暂停按扭
//void MainWindow::on_btnPause_clicked()
//{
//    qDebug()<<">>>检查播放器暂停按钮中>>>";
//    player->pause();
//    qDebug()<<">>>检查播放器暂停按钮成功!!!";
//}

//停止按扭
void MainWindow::on_btnStop_clicked()
{
    qDebug()<<">>>检查播放器停止按钮中>>>";
    btnPlay->setFlat(true);
    playPause =true;
    btnPlay->setText("播放");
    btnPlay->setIcon(QIcon(":/images/play.png"));

    btnStop->setFlat(false);
    player->stop();
    qDebug()<<">>>检查播放器停止按钮成功!!!";
}

//上一首
void MainWindow::on_btnPrevious_clicked()
{
    qDebug()<<">>>检查播放器上一首按钮中>>>";
    if(playlist->currentIndex()<0)
    {
        playlist->setCurrentIndex(0);
        qDebug()<<">>>检查播放器上一首按钮失败!!!!";
        return ;
    }
    playlist->setCurrentIndex(playlist->currentIndex()-1);
    player->play();
    btnPlay->setText("暂停");
    btnPlay->setIcon(QIcon(":/images/pause.png"));
    playPause =false;
    btnStop->setFlat(true);
    qDebug()<<">>>检查播放器上一首按钮成功!!";
}

//下一首
void MainWindow::on_btnNext_clicked()
{
    qDebug()<<">>>检查播放器下一首按钮中>>>";
    if(playlist->currentIndex()<0)
    {
        playlist->setCurrentIndex(0);
        qDebug()<<">>>检查播放器下一首按钮失败!!!!";
        return ;
    }
    playlist->setCurrentIndex(playlist->currentIndex()+1);
    player->play();
    btnPlay->setText("暂停");
    btnPlay->setIcon(QIcon(":/images/pause.png"));
    playPause =false;
    btnStop->setFlat(true);

    qDebug()<<">>>检查播放器下一首按钮成功!!";
}

//声音状态
void MainWindow::on_btnSound_clicked()
{
    qDebug()<<">>>检查播放器声音/静音按钮中>>>";
    //    mute =player->isMuted();
    if(mute)
    {
        btnSound->setIcon(QIcon(":/images/mute.png"));
        player->setVolume(0);
        btnSound->setText(QString::number(0));
        sliderPosition->setValue(0);
        mute=false;
        qDebug()<<"当前执行为静音";
    }
    else
    {
        btnSound->setIcon(QIcon(":/images/sound.png"));
        player->setVolume(50);
        btnSound->setText(QString::number(50));
        sliderPosition->setValue(50);
        mute =player->isMuted();
        mute=true;
        qDebug()<<"当前执行为声音";
    }
    qDebug()<<">>>检查播放器声音/静音按钮成功!!!";

有很多笔记和调试过程代码也在里面,觉得多余就忽略吧。没有太多时间就耗在这个文件布局里面了,我也是为了以后忘记能快速找到相关信息,毕竟放在这里也不占着自己的电脑内存
输出大概样子就是这样(如下图):
在这里插入图片描述
在这里插入图片描述差点忘记了那个音乐播放器标题是在main.cpp函数里面写的

w.setWindowTitle("音乐播放器");

大概就是这么多。那些图标是通过Add new添加的,不要忘记了,不然实现不了上面的效果。

时间有点赶,先这样了,有空回头再修改
后期也会放在个人公众号 “秋后的才华决定你的余生” 上面,
有兴趣可以关注一下。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值