:
MediaSource>sources;//媒体资源
QAction*playAction;//播放按钮
QAction*pauseAction;//暂停按钮
QAction*stopAction;//停止按钮
QAction*addFilesAction;//添加文件按钮
QLCDNumber*timeLcd;//显示屏
QTableWidget*musicTable;//音乐表格
QPushButton*PbChange;//换肤按钮
intmyRand(intmax);//随机数
intmiGrade;
下面就各功能分块介绍:
1,添加文件功能
addFilesAction=newQAction(tr("添加文件"),this);
connect(addFilesAction,SIGNAL(triggered()),this,SLOT(addFiles()));
voidMainWindow:
:
addFiles()
{
QStringListfiles=QFileDialog:
:
getOpenFileNames(this,tr("选择文件"),//添加文件对话框
QDesktopServices:
:
storageLocation(QDesktopServices:
:
MusicLocation));//文件地址
if(files.isEmpty())//如果文件为空,返回
return;
intindex=sources.size();
foreach(QStringstring,files)
{
Phonon:
:
MediaSourcesource(string);
sources.append(source);
}
metaInformationResolver->setCurrentSource(sources.at(index));
}
将添加文件按钮加入到菜单中:
voidMainWindow:
:
setupMenus()//设置菜单
{
QMenu*fileMenu=menuBar()->addMenu(tr("文件"));
fileMenu->addAction(addFilesAction);
}
最终功能效果如图:
2,显示播放时间功能
voidMainWindow:
:
tick(qint64time)
{
QTimedisplayTime(0,(time/60000)%60,(time/1000)%60);
timeLcd->display(displayTime.toString("mm:
ss"));
}
功能效果如图:
3,播放进度条功能
seekSlider=newPhonon:
:
SeekSlider(this);
seekSlider->setMediaObject(mediaObject);
QHBoxLayout*seekerLayout=newQHBoxLayout;
seekerLayout->addWidget(seekSlider
功能效果如图:
4,播放控制功能
voidMainWindow:
:
setupActions()
{
playAction=newQAction(style()->standardIcon(QStyle:
:
SP_MediaPlay),tr(""),this);
playAction->setDisabled(true);//设置初始不可点击
pauseAction=newQAction(style()->standardIcon(QStyle:
:
SP_MediaPause),tr(""),this);
pauseAction->setDisabled(true);//设置初始不可点击
stopAction=newQAction(style()->standardIcon(QStyle:
:
SP_MediaStop),tr(""),this);
stopAction->setDisabled(true);//设置初始不可点击
//连接槽函数
connect(playAction,SIGNAL(triggered()),mediaObject,SLOT(play()));
connect(pauseAction,SIGNAL(triggered()),mediaObject,SLOT(pause()));
connect(stopAction,SIGNAL(triggered()),mediaObject,SLOT(stop()));
connect(addFilesAction,SIGNAL(triggered()),this,SLOT(addFiles()));
}
将播放控制按钮添加到窗体,使用QToolBar类的bar指针布局
QToolBar*bar=newQToolBar;
bar->addAction(playAction);
bar->addAction(pauseAction);
bar->addAction(stopAction);
功能效果如图:
5,音量滑块功能
volumeSlider=newPhonon:
:
VolumeSlider(this);
volumeSlider->setAudioOutput(audioOutput);
volumeSlider->setSizePolicy(QSizePolicy:
:
Maximum,QSizePolicy:
:
Maximum);
QToolBar*bar=newQToolBar;
QHBoxLayout*playbackLayout=newQHBoxLayout;
playbackLayout->addWidget(bar);
playbackLayout->addWidget(volumeSlider);
功能效果如图:
6,换肤功能
QPushButton*PbChange;//换肤按钮
PbChange=newQPushButton("换肤",this);
connect(PbChange,SIGNAL(clicked()),this,SLOT(slotChange()));
//槽函数,每一个随机数对应一种事件,换背景图片
voidMainWindow:
:
slotChange()
{
inti=myRand(miGrade);
switch(i){
case0:
setStyleSheet("background-image:
url(D:
/Qt/XuYuXiang/Player/images/2.jpg);");
break;case1:
setStyleSheet("background-image:
url(D:
/Qt/XuYuXiang/Player/images/3.jpg);");
break;case2:
setStyleSheet("background-image:
url(D:
/Qt/XuYuXiang/Player/images/1.png);");
break;case3:
setStyleSheet("background-image:
url(D:
/Qt/XuYuXiang/Player/images/5.jpg);");
break;default:
break;
}
intMainWindow:
:
myRand(intmax)//产生4以内的随机正整数
{
max=4;
intr=qrand();
returnr%max;
}
7.点击事件
voidMainWindow:
:
tableClicked()
{
boolwasPlaying=mediaObject->state()==Phonon:
:
PlayingState;
mediaObject->stop();
mediaObject->clearQueue();
if(wasPlaying)
mediaObject->play();
else
mediaObject->stop();
}
8.主窗口设置
QWidget*widget=newQWidget;
widget->setLayout(mainLayout);
setCentralWidget(widget);
setWindowTitle("播放器");
setMaximumSize(800,400);
setMinimumSize(800,400);
setStyleSheet("background-image:
url(D:
/Qt/XuYuXiang/Player/images/4.jpg);");
最终界面效果如图:
第3章
实验结论与心得体会
该播放器利用Phonon媒体框架,实现了播放MP3、WAV、WMV等Windows音频格式的文件。
通过对该程序的编写和对面向对象程序设计的了解,使得我对Qt编程设计又有了更深的认识,同时了解了Phonon的相关知识。
课程是辛苦劳累的,但收获同样是巨大的,在课程设计中每解决一个问题,那种成就是无法语言的,调试中往往会遇到很多问题,不过经过查询资料,咨询老师,与同学探讨最终会得到理想的程序。
只有在实践中才能得到真正的提升,因为只有在项目实战中才能遇到我们在课堂上遇不到的问题。
而解决这些问题的过程正是我们学习与进步的过程。
回想在这次学习的的过程中,遇到了许多大大小小的问题,而这些问题,都是以我目前的知识水平无法解决的,所以,为了解决这些问题,需要自己去查找资料、请教同学,在这个过程中学到了很多以前不懂的知识。
总的来说,这个音乐播放