QT设计实现音乐播放器的基本功能

通过QT对madplay的应用,实现音乐播放器的功能,包括开始播放、暂停播放、继续播放、终止播放、播放上一首、播放下一首、添加指定目录下的音乐、删除指定歌曲、清空列表。应用到QFileDialog、QStringList等类,最后可以通过交叉编译移植到开发板上运行。

界面效果如下图:

在这里插入图片描述




具体代码如下:
player.h

#ifndef PLAYER_H
#define PLAYER_H

#include <QDialog>
#include <QWidget>
#include <QProcess>
#include <QFileDialog>

namespace Ui {
    
    
class player;
}

class player : public QDialog
{
    
    
    Q_OBJECT

public:
    explicit player(QWidget *parent = 0);
    ~player();

private slots:
    void on_pushButton_close_clicked();

    void on_pushButton_start_clicked();

    void on_pushButton_add_clicked();

    void on_listWidget_itemDoubleClicked();

    void on_pushButton_stop_clicked();

    void on_pushButton_prev_clicked();

    void on_pushButton_next_clicked();

    void on_pushButton_clear_clicked();

    void on_pushButton_delete_clicked();

    void on_pushButton_exit_clicked();

private:
    Ui::player *ui;
    QProcess *p;
    QString Music_path;
};

#endif // PLAYER_H



player.cpp

#include "player.h"
#include "ui_player.h"
#include <QDebug>

player::player(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::player)
{
    
    
    ui->setupUi(this);

    p = new QProcess(this);
    ui->pushButton_stop->setEnabled(false);                                                                        //失能暂停按钮

//    this->setAutoFillBackground(true);                                                                           //自定义背景
//    QPalette palette = this->palette();
//    palette.setBrush(QPalette::Window,QBrush(QPixmap("./background.jpeg").                                       //使用平滑的缩放方式
//                                             scaled(this->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));
//    this->setPalette(palette);                                                                                   //给widget加上背景图
}

player::~player()
{
    
    
    delete ui;
    p->kill();
    p->waitForFinished();
}

void player::on_pushButton_close_clicked()                                                                         //终止播放
{
    
    
    p->kill();                                                                                                     //关闭播放器
    p->waitForFinished();                                                                                          //等待关闭
    ui->pushButton_stop->setEnabled(false);                                                                        //失能暂停按钮
}

void player::on_pushButton_start_clicked()
{
    
    
    if(p->state() == QProcess::Running)                                                                            //如果有音乐在播放
    {
    
    
        on_pushButton_close_clicked();                                                                             //终止播放
    }

    QString buf = QString("madplay");
    QStringList args;
    Music_path = ui->listWidget->currentItem()->text();                                                            //记录当前播放的音乐
    args<<Music_path<<"&";
    p->start(buf,args);                                                                                            //执行QString命令

    ui->pushButton_stop->setText("暂停");                                                                           //重置暂停按钮
    ui->pushButton_stop->setEnabled(true);                                                                         //使能暂停按钮
}

void player::on_pushButton_add_clicked()                                                                           //添加音乐
{
    
    
    QStringList music_files =  QFileDialog::getOpenFileNames(this,"选择音乐文件","./music","*.mp3 *.WAV");

    for(int i = 0; i < ui->listWidget->count(); i++)                                                               //去重
    {
    
    
        for(int j = 0; j < music_files.count(); j++)
        {
    
    
            if(ui->listWidget->item(i)->text() == music_files.at(j))
            {
    
    
                music_files.removeAt(j);
                break;
            }
        }
    }
    ui->listWidget->addItems(music_files);                                                                         //将文件添加到listWidget
    ui->listWidget->setCurrentRow(0);                                                                              //定位
}

void player::on_listWidget_itemDoubleClicked()                                                                     //双击播放音乐
{
    
    
    on_pushButton_start_clicked();
}

void player::on_pushButton_stop_clicked()                                                                          //暂停播放、继续播放音乐
{
    
    
    QString buf = QString("killall");
    QStringList args;

    if(ui->pushButton_stop->text() == "暂停")
    {
    
    
        ui->pushButton_stop->setText("继续");
        args<<"-STOP"<<"madplay";
    }
    else
    {
    
    
        ui->pushButton_stop->setText("暂停");
        args<<"-CONT"<<"madplay";
    }
    p->execute(buf,args);
}

void player::on_pushButton_prev_clicked()                                                                          //上一首
{
    
    
    int row = ui->listWidget->currentRow();
    if(row == 0)
        row = ui->listWidget->count();
    row--;
    ui->listWidget->setCurrentRow(row);
    p->kill();
    p->waitForFinished();

    QString buf = QString("madplay");
    QStringList args;
    Music_path = ui->listWidget->currentItem()->text();
    args<<Music_path<<"&";
    p->start(buf,args);
}

void player::on_pushButton_next_clicked()                                                                          //下一首
{
    
    
    int row = ui->listWidget->currentRow();
    if(row == ui->listWidget->count()-1)
        row = 0;
    else
        row++;
    ui->listWidget->setCurrentRow(row);
    p->kill();
    p->waitForFinished();

    QString buf = QString("madplay");
    QStringList args;
    Music_path = ui->listWidget->currentItem()->text();
    args<<Music_path<<"&";
    p->start(buf,args);
}

void player::on_pushButton_clear_clicked()                                                                         //清空列表
{
    
    
    on_pushButton_close_clicked();
    ui->listWidget->clear();
}

void player::on_pushButton_delete_clicked()                                                                        //删除音乐
{
    
    
    if(ui->listWidget->currentItem()->text() == Music_path)
    {
    
    
        on_pushButton_close_clicked();
    }

    int row = ui->listWidget->currentRow();
    QListWidgetItem *item = ui->listWidget->takeItem(row);
    if(item)
    {
    
    
        delete item;
        on_pushButton_start_clicked();
    }
}

void player::on_pushButton_exit_clicked()                                                                          //退出
{
    
    
    on_pushButton_close_clicked();
    this->close();
}

完整代码:https://download.csdn.net/download/weixin_43793181/13458544

猜你喜欢

转载自blog.csdn.net/weixin_43793181/article/details/110824372
今日推荐