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

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (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= Q T D I R / b i n : QTDIR/bin: PATH
export LD_LIBRARY_PATH= Q T D I R / l i b : / u s r / l o c a l / l i b : 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);
}

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

猜你喜欢

转载自blog.csdn.net/weixin_44611644/article/details/95064296