[嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计【2018年给力项目】

[嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计【2018年给力项目】是【创科之龙】团队aiku嵌入式视频教程系列制作的现有的音乐播放器。
主要功能实现:

1.新建工程,基类选择Qwidget。双击打开界面文件,在界面文件中创建label显示时间、若干个toolbutton按钮和一个listWidget列表显示歌曲列表。点击“文件”->“新建”创建QT资源文件,在工程目录下建文件夹“images”, 双击QT资源文件添加前缀“/”,再添加图标文件。

2.单击上一曲按钮,在属性栏设置标题tooltip和图标icon:

 

界面如下:

 

 

 

运行程序最后效果如下:

代码如下:

3.右键几个按钮,转入槽函数,列表和歌词的信号选择clicked(bool)。

4.工程文件中添加语句

QT       += phonon

对音乐播放器进行设计,主要用到模块中的MediaObject (管理媒体源)  AudioOutput (连接物理设备)SeekSlider(实现进度条)QList (实现播放列表 )

大概地说, Phonon 的工作机制是使用 MediaObject 来管理 MediaSource 即源文件,通过 Path 连接到 AudioOutput ,最后是由AudioOutput 将数据发送到相关物理设备。

 

5.修改widget.h头文件

在widget.h头文件添加语句:

#include <phonon>

在头文件声明变量:

private:

 Phonon::MediaObject *audio;//管理媒体源

    Phonon::MediaObject *musicInformationMediaObject;//

    Phonon::VideoWidget *videoWidget;//

    Phonon::AudioOutput *audioOutput;//连接物理设备

    Phonon::SeekSlider *seekSlider;//实现进度条

    Phonon::VolumeSlider *volumeSlider;//音量调节

    QList<Phonon::MediaSource> sourceList;//播放列表

    QTimer *timer;

    QIcon *iconplay;

    QIcon *iconpause;

    QAction *play;

    QAction *stop;

    QAction *open;

    QAction *sound;

    QAction *exit;

QAction *remove;

头文件声明函数:

public:

    void creatActions();//创建动作

6.修改widget.cpp文件

构造函数添加:

this->setWindowTitle(tr("音乐播放器"));//设置标题

    /**初始化媒体**/

    audio =new Phonon::MediaObject();//媒体对象

    audio->setTickInterval(1);

    audioOutput = new Phonon::AudioOutput(Phonon::VideoCategory);//音频输出

    Phonon::createPath(audio,audioOutput);//连接媒体对象与音频输出

    musicInformationMediaObject = new Phonon::MediaObject(this);  //音乐信息对象

    volumeSlider = new Phonon::VolumeSlider(audioOutput,this);  //音量滑动条

    volumeSlider->move(190,100);

    volumeSlider->resize(50,20);

    volumeSlider->setStyleSheet("background-color:rgb(255,255,255,100)");

    volumeSlider->setFixedWidth(100);//固定音量条大小

    seekSlider = new Phonon::SeekSlider(audio,this); //进度滑动条

    seekSlider->move(10,35);

    seekSlider->resize(170,20);

    seekSlider->setStyleSheet("background-color:rgb(255,255,255,100)");

    creatActions();

函数定义:

//播放/暂停

void Widget::on_toolButton_playpause_clicked()

{

    if(sourceList.isEmpty())

        {

            //QMessageBox::information(this, tr("no music files"), tr("no files to play"));

            return ;

        }

        audio->setQueue(sourceList);//列表循环

    if(audio->state() == Phonon::PlayingState)

        audio->pause();

    else

    {

        audio->play();

    }

}

//停止播放

void Widget::on_toolButton_stop_clicked()

{

    audio->stop();

}

 

void Widget::on_toolButton_open_clicked()

{

    QStringList files = QFileDialog::getOpenFileNames(this, tr("Selec Files to play"));

    // 使用 QFileDialog getOpenFileNames 方法获取若干个音乐文件,

    QString file;

    foreach(file, files)// 使用 Qt 中的 foreach 遍历每个选中的文件,将其添加到播放列表中。

    {

        ui->listWidget->addItem(file);

        sourceList.append(file);

    }

}

 

void Widget::creatActions()

{

    QIcon iconremove(":/images/remove.png");

    QIcon iconstop(":/images/gtk-media-stop.png");

    QIcon iconopen(":/images/gtk-open.png");

    QIcon iconsound(":/images/sound.png");

    QIcon iconexit(":/images/exit.png");

    iconpause = new QIcon(":/images/gtk-media-pause.png");

    iconplay = new QIcon(":/images/gtk-media-play-ltr.png");

    remove = new QAction(iconremove,tr("清空播放列表"),this);

    connect(remove,SIGNAL(triggered()),this,SLOT(removeSlot()));

    play = new QAction(*iconplay,tr("播放"),this);

    connect(play,SIGNAL(triggered()),this,SLOT(on_toolButton_playpause_clicked()));

    stop = new QAction(iconstop,tr("停止"),this);

    connect(stop,SIGNAL(triggered()),audio,SLOT(stop()));

    open = new QAction(iconopen,tr("打开文件"),this);

    connect(open,SIGNAL(triggered()),this,SLOT(on_toolButton_open_clicked()));

    sound = new QAction(iconsound,tr("静音"),this);

    sound->setCheckable(true);

    connect(sound,SIGNAL(triggered(bool)),audioOutput,SLOT(setMuted(bool)));

    exit = new QAction(iconexit,tr("退出"),this);

    connect(exit,SIGNAL(triggered()),this,SLOT(exitSlot()));

}

7.在main.cpp文件中添加中文支持:

#include <QTextCodec>

    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

8.运行程序,效果如下:

 

9.到此为止,程序能实现“打开”、“播放”、“暂停”、“停止”、进度条拉动,声音调节,静音功能。下一步工作是完善其他功能及歌词显示。

##########################################################

代码下载网盘:(免费下载学习)

第一期视频教程

链接:https://pan.baidu.com/s/1YAnAQVaIlnc2k1pkKzCCBg 密码:4gu6


第二期视频教程
接:https://pan.baidu.com/s/1QoyABxf6J1o6mtA8hjaa3Q 密码:7z01


第三期视频教程
链接:https://pan.baidu.com/s/1Jj6jqBQZC0CABW1kOqZU6A 密码:ox0l
 

##########################################################

  欢迎广大学子交流嵌入式和安卓开发

  aiku老师 微信号  :aiku868

   微信公众平台:aiku嵌入式视频教程创科之龙

   aiku老师QQ:1653687969

   技术解答QQ群:234945702

    aiku老师 微信号欢迎一起交流!(有任何问题都可以问我,随时解答问题。)

 
##########################################################
 

  • 9
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值