基于Phonon的本地音乐播放器

基于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。虽然过程很累,但是我也很享受。虽然小播放器比较简陋,但是自己写的自己用,也有一种成就感。以后啊,要继续努力。这个播放器还要在升升级,变得更厉害一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值