[嵌入式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
在头文件声明变量:
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::setCodecForTr
(QTextCodec::codecForLocale
());
8.运行程序,效果如下:

9.到此为止,程序能实现“打开”、“播放”、“暂停”、“停止”、进度条拉动,声音调节,静音功能。下一步工作是完善其他功能及歌词显示。
##########################################################
代码下载 {MOD}:(免费下载学习)
第一期视频教程
链接: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老师 微信号欢迎一起交流!(有任何问题都可以问我,随时解答问题。)


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