基于Phonon的本地音乐播放器
之前逛博客的时候偶然看到一个音乐播放器的小项目,于是这两天也动手写了一个基于Phonon的本地音乐播放器。使用版本为Qt4.7.3。
目前的功能不多,界面也比较丑。后续还会做版本升级和Qt5的基于QMediaPlayer的音乐播放器。主要功能有歌曲的播放暂停,上一首/下一首,搜索本地的歌曲,歌曲列表,调节音量。如下,
下面讲一下我做这个小播放器的2天。
首先是界面的设计和编码。
主要是窗体和控件的设置,用到的控件有QLabel,QPushButton,QLineEdit,QTableWidget。
窗体主要有下面设置:
this->setWindowFlags(Qt::FramelessWindowHint);//设置窗口无边框
this->setFixedSize(1000,600);//设置窗口大小,且不可改变
this->setWindowOpacity(1);//设置窗口背景透明,1不透明 0透明
this->setAttribute(Qt::WA_TranslucentBackground);//设置背景透明
this->pixmap_background = new QPixmap("image/background/bg2.jpg");//设置桌面的背景图片
this->lab_background = new QLabel(this);//用一个QLabel控件来放背景图片
lab_background->setGeometry(0,0,1000,600);
lab_background->setPixmap(*pixmap_background);
QLabel,QPushButton和QLineEdit这三个很基础的控件都是用他们的样式表设置:例如播放按钮
this->btn_play = new QPushButton(this);
btn_play->setGeometry(141,546,40,40);//设置控件位置和大小
btn_play->setFlat(true);//设置点击后没有灰色背景框
btn_play->setStyleSheet("QPushButton{background: transparent; border-image: url(:/image/btn/pause.png);}"
"QPushButton:hover{background: transparent; border-image: url(:/image/btn/pause1.png);}"
"QPushButton:pressed{background: transparent; border-image: url(:/image/btn/pause1.png);}");
QTableWidget控件用来作为播放列表。
详细教程可参考QTableWidget传送门
其次是Phonon的使用
在Qt4.7.3中使用Phonon时,要先在.pro文件中添加一些代码:
QT += core gui phonon sql
#这里包括了后面要用到的sql数据库
以下是我放在类里的Phonon成员:
Phonon::MediaObject *m_music;//声明媒体对象
Phonon::AudioOutput *m_audioout;
Phonon::Path m_path;
Phonon::SeekSlider *m_slider;//声明进度条
Phonon::VolumeSlider *m_voice_slider;//音量进度条
在cpp文件中的初始化:
this->m_music = new Phonon::MediaObject(this);
this->m_audioout = new Phonon::AudioOutput(Phonon::MusicCategory,this);
this->m_path = Phonon::createPath(m_music, m_audioout);//建立连接
this->m_slider = new Phonon::SeekSlider(this);//播放进度条
m_slider->setMediaObject(this->m_music);
this->m_voice_slider = new Phonon::VolumeSlider(this);//音量进度条
m_voice_slider->setAudioOutput(this->m_audioout);
设置播放文件时,使用setCurrentSource()函数。
QUrl url(QString("song/10001.wav"));
m_music->setCurrentSource(Phonon::MediaSource(url));
如果你觉得进度条不好看可以设置样式表,我的设置如下:
m_slider->setStyleSheet("QSlider::groove:horizontal{border: 1px solid #165708;background: #8f8f8f;height: 3px;border-radius: 2px;padding-left:-1px;padding-right:-1px;}"
"QSlider::handle:horizontal{border:2px solid #454343;background:#2af5b9;width:9px;margin-top: -4px;margin-bottom: -4px;border-radius: 4px;}"
"QSlider::sub-page:horizontal {background:#2af5b9;border: 1px solid #4A708B;height: 10px;border-radius: 2px;}"
"QSlider::add-page:horizontal {background: #615f5f;border: 0px solid #2af5b9;height: 10px;border-radius: 2px;}");
最后是数据库的设计和使用
所有的歌曲信息都存放在数据库中,实际歌曲文件名为歌曲的id,这样方便管理和使用。
以下函数是从数据库获取歌曲的id号,并返回,用于播放。
int CSDB::GetSong(QString name)
{
QSqlQuery SqlQuery;//使用该类以执行数据库语句
if(SqlQuery.exec(QString("select id from song where thisSong = '%1';").arg(name)))
{
SqlQuery.next();
return SqlQuery.value(0).toInt();
}
}
总结
几个月前使用Qt时,逛博客看到有人用Qt5的QMediaPlayer做了一个音乐播放器,当时就很佩服很有感触,萌生了自己也写一个播放器的想法。于是最近自己就先用Qt4的Phonon做了一个简易的小播放器,用起来也不赖。
在这两天里,用到的一些控件、类、函数等,我还是之前没有用过的,所以在写的过程中,不断的百度,查看内置的开发文档。遇到了很多bug,很多问题,每一个bug都要测试一遍又一遍,修改一次又一次,才能得到最终的Pass。虽然过程很累,但是我也很享受。虽然小播放器比较简陋,但是自己写的自己用,也有一种成就感。以后啊,要继续努力。这个播放器还要在升升级,变得更厉害一些。