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/20335001

一个完整的毕业设计带说明讲解 该音乐播放器是本地音乐播放器,用户可以将本地音乐添加到音乐曲库中,支持歌词显示及样式设置,支持用户注册,用户登录后可以定制自己的音乐播放列表。该项目主要应用到了Qt的数据库操作和媒体库使用。 二、功能: 【创建新列表】: 只有用户登录之后,才能创建新列表。播放列表是针对每个登录用户显示的,用户与用户之间的播放列表可以不同。 【登录/注册】: 用户可以注册账号,然后登录自己的账号,定制自己的播放列表。 【设置】: 【添加歌曲】:点击后弹出的窗体中,列表显示曲库中的所有歌曲,下面有三个按钮,“添加文件夹”按钮支持用户选择本地歌曲文件夹,然后将该文件夹下的所有歌曲都添加到曲库中;“添加音乐”按钮需选择音乐文件后添加到曲库;“删除音乐”按钮将用户已选择的歌曲从曲库中移除。 【字体样式】:该窗口用来调整主窗口中歌词的样式,包括歌词的字体、字形、大小,以及歌词的普通颜色和高亮颜色。 【个人资料】:这个窗口用来显示已登录用户的个人信息资料,包括登录状态、用户头像、用户昵称、个性签名和注册时间。用户可以通过点击头像来重新设置自己的头像,还可以更新自己的个性签名,更改设置后点击保存。 【歌词路径】:因为该播放器是本地音乐播放器,所以歌词路径是根据用户添加歌曲时的路径确定的,当用户的歌词不在默认路径时,需要用户在此处手动设置歌词的路径。 【搜索】: 支持搜索添加到曲库中的歌曲
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佳佳鸽

若文章帮到你,能不能请我喝杯茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值