media_object->setCurrentSource(sources.at(index + 1)); media_object->play(); }
4.5 音量控制设计
音量控制是一个播放器必不可少的组成部分,音量过大或是过小,都会对我们欣赏美妙的音乐产生负面的影响。因此,控制适当的音量输出,是我们在欣赏美妙的音乐的前必须经历的步骤。以下是其具体代码实现:
//音量控制部件
Phonon::VolumeSlider *volume_slider = new
Phonon::VolumeSlider(audio_output, this);
volume_slider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
至此,我们的播放器的基本功能实现代码已经完成,其他一些不是很重要的代码就不在此赘述。
17
结 论
在各位老师的悉心指导、同学们的无私帮助和自己的辛苦努力下,我大体上完成了“音乐播放器”软件的开发,不过由于时间仓促,加之经验还不是很足,可能仍存在着许多的不足,一些功能还没有实现,比如这个播放器不能实现在线播放,如果当前播放的歌曲的歌词不存在,不能在网上搜索歌词以及下载歌词到本地等,总之,整个播放器还有许多功能需要进一步完善和改进。
经过对本次毕业设计有始有终的设计和开发,使我在大学学到的知识和知识的应用更加熟练,同时,在这个过程中,我也学习到了许多的新知识,并将这些新知识运用到本次“音乐播放器”的设计过程中,从而能达到学以致用的效果。
在本次程序设计的过程中,我体会到了只有真正的实践才能牢牢掌握知识,同时,我认识到,光靠学校教材上的知识在现实生活中是远远不够的,只有更多的学习新知识,紧跟知识发展潮流的脚步,切实做到理论与实践相结合,才能达到真正意义上的学以致用。我在本次程序的设计中,由于开始把握整体框架,细化流程做的不是很好,中间走了很多的弯路。这使我认识到,在以后的生活中、工作中,遇到问题时,一定要把握好整体框架,将问题从上到下分解,一步一步脚印,这样才能少走弯路,更好的解决问题。
18
参考文献
[1] 田淑清全国计算机等级考试二级教程--C语言程序设计[M].北京:高等教育
出版社,2008:1
[2] 袁慧梅,宋宇.基于CPLD的MIDI音乐播放器的设计[J].北京,首都师范
大学,2005:2
[3] 黄振杰,卢小冰.基于AT89S52单片机的多功能音乐播放器[J].广州,华南
农业大学,2009:1-4
[4] 许谨. 基于Android平台音乐播放器的设计与实现[J].北京:北京邮电大学,
2011:1-4
[5] Andrew Koenig.C陷阱与缺陷[M].北京:人民邮电出版社,2008:121 [6] 林华,张新林.大学计算机基础教程[M].北京:人民邮电出版社,2007:
234-235
[7] 宫虎波等.Linux编程从入门到精通[M].北京:化学工业出版社,2009:175 [8] Peter Van Der Linden. C专家编程[M].北京:人民邮电出版社,2008:243-244 [9] Andrew Koenig Barbara Moo. C++沉思录[M].北京:人民邮电出版社,
2008: 1
[10] 利普曼,加.劳乔.C++ Primer[M].北京:人民邮电出版社,2006:28 [11] 周学毛. 新编C语言程序设计教程[M].西安:西安电子科技大学出版社,
2008:258
[12] Kenneth A.Reek.C和指针[M].北京:人民邮电出版社,2008
[13] Amarjot Singh; Ketan Bacchuwar; Akash Choubey; Srikrishna Karanam;
Devinder Kumar.An OMR Based Automatic Music Player.Proceedings of 2011 3rd International Conference on Computer Research and Development(ICCRD 2011) VOL.01[J].2011
19
附 录
#include \ #include \ #include \ #include \ #include
#include
#include
#include
MyWidget::MyWidget(QWidget *parent) : QWidget(parent),
ui(new Ui::MyWidget) {
ui->setupUi(this); InitPlayer();
// this->setWindowFlags(Qt::FramelessWindowHint); }
MyWidget::~MyWidget() {
delete ui; }
void MyWidget::paintEvent(QPaintEvent *event) {
QPainter painter(this);
painter.drawPixmap(0,0,this->width(),this->height(),QPixmap(\)); }
//初始化播放器
void MyWidget::InitPlayer() {
//设置窗口基本属性
setWindowTitle(tr(\音乐播放器\));
setWindowIcon(QIcon(\));//从资源文件中招图标
20
setMinimumSize(400, 200);
setMaximumSize(400, 200);//最大最小设置为一样,代表不改变播放器窗口的大小 //创建媒体对象
media_object = new Phonon::MediaObject(this);
Phonon::AudioOutput *audio_output = new Phonon::AudioOutput(Phonon::MusicCategory, this);
Phonon::createPath(media_object, audio_output);//绑定源和接收器 //关联媒体对象的tick信号来更新播放时间的显示
connect(media_object, SIGNAL(tick(qint64)), this, SLOT(UpdateTime(qint64))); //创建顶部标签
top_label = new QLabel(tr(\ href=\\\
http://weibo.com/u/3010837085?topnav=1&wvr=5\ top_label->setTextFormat(Qt::RichText);
top_label->setOpenExternalLinks(true);//运行点击进入外部链接 top_label->setAlignment(Qt::AlignCenter); //创建控制播放进度的滑块
Phonon::SeekSlider *seek_slider = new Phonon::SeekSlider(media_object, this); //设置显示时间的标签
QToolBar *widget_bar = new QToolBar(this); time_label = new QLabel(tr(\), this); time_label->setToolTip(tr(\当前时间/总时间\)); time_label->setAlignment(Qt::AlignCenter);
//QSizePolicy类是描述水平和垂直修改大小策略的一种属性
time_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);//水平方向上尺寸可扩展,水平方向已固定 //播放列表开启控制图标
PLAction = new QAction(tr(\), this);
PLAction->setShortcut(QKeySequence(\));//设置开启播放列表的快捷键为F4 PLAction->setToolTip(tr(\播放列表(F4)\));
connect(PLAction, SIGNAL(triggered()), this, SLOT(SetPlayListShown()));//链接触发信号 //桌面歌词显示开启控制图标
LRCAction = new QAction(tr(\), this);
LRCAction->setShortcut(QKeySequence(\));//设置开启桌面歌词的播放列表快捷键为F2
LRCAction->setToolTip(tr(\桌面歌词(F2)\));
connect(LRCAction, SIGNAL(triggered()), this, SLOT(SetLrcShown()));
//将上面2个action和1个widget添加到工具栏,默认的添加方式为水平方向添加 widget_bar->addAction(PLAction); widget_bar->addSeparator();
widget_bar->addWidget(time_label); widget_bar->addSeparator();
widget_bar->addAction(LRCAction); widget_bar->addSeparator();
21