您的位置:首页 > 编程语言 > Qt开发

使用QT进行MP3播放器的设计与实现

2019-07-08 15:46 1736 查看
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

内容
在Linux平台(Redhat或Ubuntu)环境下配置QT环境,设计一个基于图形化界面的MP3播放器。

抽象数据类型定义
QT是一个拥有很多C++封装方法的集成工具,我们使用时候需要在.h文件的类定义中添加自己所需要的变量和方法定义
1 定义int类型私有变量 playIndex存放进程标号
2 定义QPrecess类型私有变量*playProcess控制进程
3 定义QStringList 类型私有变量playList存放音乐列表
4 定义Init()初始化函数函数和playMovie()声明
5 在slots中添加所需要的槽函数,即事件触发的处理函数。
6 arguments存放文件,program存放进程工具,用于process进程的执行,比如->start()函数的两个参数一个是执行的进程,一个是arg参数。

环境搭建
(1)QT安装与配置
解压qt-everywhere-opensource-src-4.7.3.tar.gz

命令tar -xvzf qt-everywhere-opensource-src-4.7.3.tar.gz

进入qt-everywhere-opensource-src-4.7.3 目录 执行配置文件

命令 sudo ./configure 安装过程键入 o yes
等待安装成功

(2)编译源码
命令make –j8
安装程序 make install 安装成功后系统生成一个文件 /usr/local/Trolltech/Qt-4.7.3/bin/qmake

(3)配置QT环境变量
命令 vi /usr/local/Trolltech/Qt-4.7.3.setenv.sh
export QTDIR=/usr/local/Trolltech/Qt-4.7.3
export PATH=QTDIR/bin:QTDIR/bin:QTDIR/bin:PATH
export LD_LIBRARY_PATH=QTDIR/lib:/usr/local/lib:QTDIR/lib:/usr/local/lib:QTDIR/lib:/usr/local/lib:LD_LIBRARY_PATH
保存退出 wq
命令 source/usr/local/Trolltech/Qt-4.7.3.setenv.sh
命令qmake –v 输出版本信息 表明配置成功

(4)测试
执行命令 qmake –project qmake make ./keshe

可正常使用,接下来进入正题。

详细设计
设计栏的工具拖5个Push button 和2个Horizontal Spacer

1个滑槽horizontal slider 和1个调节旋钮dial

替换部件样式

新建资源文件与添加图片资源



然后进行图标大小修改和格式调整

修改各个部件的样式颜色

界面如下

修改对象名便于函数建立,每个部件转到槽函数定义功能

代码设计

Widget类的声明

class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_btn_open_clicked();
void on_btn_play_clicked();
void on_btn_stop_clicked();
void on_btn_prevous_clicked();
void on_btn_next_clicked();
void on_dial_voice_valueChanged(int value);
private:
Ui::Widget *ui;
QStringList playList;
int playIndex;
QProcess *playProcess;
void Init();
void playMovie(const QString filename);
};

初始化

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
Init();
}

Widget::~Widget()
{
delete ui;
}
void Widget::Init()
{
playList.clear();
playIndex=0;
playProcess=new QProcess(this);
ui->lineEdit2->setText("now playing...");
}

定义打开文件方法

oid Widget::on_btn_open_clicked()
{
QStringList array = QFileDialog::getOpenFileNames(this,"open your file",
"/home/liujinze/keshe/qtmp3/mp3/music","video(*.mp3 )");
if(array.length()<=0){
return;
}
playList =array;
playIndex=0;
playMovie(playList.at(playIndex));
}

定义播放功能方法,调用进程

void Widget::playMovie(const QString filename){

QString program="/usr/bin/madplay";
QStringList arguments;
arguments<<filename;
QString s=filename;
ui->lineEdit->setText(s);
playProcess->close();
system("killall -9 madplay");
playProcess->start(program,arguments);

}

定义暂停继续上一首下一首的切换功能

void Widget::on_btn_play_clicked()//继续
{
system("killall -CONT madplay &");

}

void Widget::on_btn_stop_clicked()//暂停
{
system("killall -STOP madplay &");
}

void Widget::on_btn_prevous_clicked()//上一首
{
if(playIndex>0){
playIndex--;
playMovie(playList.at(playIndex));
}
}

void Widget::on_btn_next_clicked()//下一首
{
if(playIndex<playList.length()-1){
playIndex++;
playMovie(playList.at(playIndex));
}
}

定义声音调节方法

void Widget::on_dial_voice_valueChanged(int value)
{
char tmp[100];
sprintf(tmp,"amixer set Master %d% ",value);
system(tmp);
}

使用效果
可以执行打开文件操作自己添加文件或多个文件,实现了音量调节,进度条更新暂停播放与上下首切换

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: