通过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