基于Phonon库的音乐播放器设计 - 图文(7)

2019-05-18 20:43

label->setMaximumSize(30,30);

label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); label->setScaledContents(true);

label->setPixmap(QPixmap(\ //将以上部件添加到工具栏 tool_bar->addWidget(label); tool_bar->addAction(play_action); tool_bar->addAction(stop_action);

tool_bar->addAction(skip_backward_action); tool_bar->addAction(skip_forward_action); tool_bar->addWidget(volume_slider); tool_bar->addAction(open_action);

// tool_bar->addSeparator(); //自己加的,加一条竖线 tool_bar->addAction(ReturnAction); tool_bar->addAction(closeAction);

tool_bar->setAllowedAreas(QT::TopToolBarArea |

QT::BottomToolBarArea); //创建主界面管理器

QVBoxLayout *main_layout = new QVBoxLayout; main_layout->addWidget(top_label); main_layout->addWidget(seek_slider); main_layout->addWidget(widget_bar); main_layout->addWidget(tool_bar); setLayout(main_layout); ????

以上代码中,通过定义两个QToolBar,一个是tool_bar,另一个是widget_bar,将一些按钮添加到这个类似容器的部件中,另外,最后创建一个主界面管理器,这些措施减低了布局设计的一些复杂性。主界面的实际效果如图6所示。

12

图6 播放器主界面图

4.2打开文件设计

对于一个播放器,添加歌曲功能是最重要的。 //设置添加音乐文件动作

QAction *open_action = new QAction(this); open_action->setIcon(QIcon(\ open_action->setText(tr(\播放文件(Ctrl+O)\ open_action->setShortcut(QKeySequence(\ open_action->setEnabled(true);

connect(open_action, SIGNAL(triggered()), this, SLOT(OpenFile()));

如果我们点击播放器上的添加文件按钮,其则发送一个信号triggered(),在C++中,消息就是成员函数的调用[11]。其则会进入到以下的槽函数中执行相关的代码,从而实现添加本地音频文件的目的;

void MyWidget::OpenFile() {

//可以同时打开多个音频文件

QStringList list = QFileDialog::getOpenFileNames(this,tr(\\

if(list.isEmpty()) return;

//获取当前媒体源列表的大小 int index = sources.size();

13

*.wma *.wmv)\

foreach(QString string, list) {

Phonon::MediaSource source(string); sources.append(source); }

if(!sources.isEmpty()) {

//如果媒体源列表不为空,则将新加入的第一个媒体源作为当前媒体源 meta_information_resolver->setCurrentSource(sources.at(index)); } }

通过调用QT中相关的类,默认打开当前文件夹的上一层目录,也可手动打开其他文件夹目录,添加歌曲。将添加的音频文件存放到播放列表中,如果点击播放按钮,则默认播放播放列表的第一首歌曲。以下为实际效果图如图7所示。

图7 播放器添加歌曲效果图

4.3播放歌曲设计

播放歌曲是“音乐播放器”的灵魂所在,将添加的歌曲通过播放器播放出来。

//设置播放动作

QToolBar *tool_bar = new QToolBar(this);//该构造函数没有写入文字 tool_bar->setFloatable(true); play_action = new QAction(this);

play_action->setIcon(QIcon(\ play_action->setText(tr(\播放(F5)\

play_action->setShortcut(QKeySequence(\播放的快捷键位F5

14

connect(play_action, SIGNAL(triggered()), this, SLOT(SetPaused()));

单击播放按钮(快捷键为F5),利用QT中的信号与槽机制,发送信号

triggered(),进入到以下的槽函数setpaused()中,执行具体的播放动作。 void MyWidget::SetPaused() {

if(media_object->state() == Phonon::PlayingState) { media_object->pause(); } else

media_object->play(); }

如果播放器的当前状态为正在播放歌曲,则单击该按钮的动作为播放歌曲,其实现的实际效果图(暂停)如图8所示。

图8 播放器暂停播放效果图

否则,则播放器进入到播放状态,其效果图如图9所示。

图9播放器播放歌曲效果图

15

4.4 播放上一首或下一首歌曲设计

几乎每一个播放器都有播放上一曲或下一曲的功能,本款软件也不例外,以下为播放上一曲的具体代码实现。

//设置上一首动作

skip_backward_action = new QAction(this);

skip_backward_action->setIcon(QIcon(\ skip_backward_action->setText(tr(\上一首(Ctrl+Left)\ skip_backward_action->setShortcut(QKeySequence(\ connect(skip_backward_action, SIGNAL(triggered()), this, SLOT(SkipBackward()));

由于QT中的信号与槽机制,播放器按下按钮之后,发送triggered()信号,则其进入到槽函数中执行相关动作: //播放上一首歌曲

void MyWidget::SkipBackward() {

lrc->stop_lrc_mask();

int index = sources.indexOf(media_object->currentSource()); media_object->setCurrentSource(sources.at(index - 1)); media_object->play(); }

如此,实现播放上一曲的功能。播放下一曲也差不多,其代码为:

//设置下一首动作

skip_forward_action = new QAction(this);

skip_forward_action->setIcon(QIcon(\ skip_forward_action->setText(tr(\下一首(Ctrl+Right)\ skip_forward_action->setShortcut(QKeySequence(\

connect(skip_forward_action, SIGNAL(triggered()), this, SLOT(SkipForward())); 其槽函数为:

//播放下一首歌曲

void MyWidget::SkipForward() {

lrc->stop_lrc_mask();

int index = sources.indexOf(media_object->currentSource());

16


基于Phonon库的音乐播放器设计 - 图文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:各工种安全操作规程

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: