使用Qt做一个简易音乐播放器[Phonon浅谈--续]
2010-02-13 13:04
375 查看
2010-2-13
使用Qt做一个简易音乐播放器【Phonon浅谈--续】
在第一篇Phonon浅谈中提及到了Phonon这个多媒体框架的一些基本知识,于是想着结合这些基本知识来实践一番,做一个简单的音乐播放器。
【步骤一】
新建一个Qt Gui工程,在建立过程中需要包含Phonon模块,之后生成文件如下图:
Qt Gui工程会生成一个ui文件,在这里是mainwindow.ui。双击mainwindow.ui进行一番简单的布局,如下图:
关于这个ui界面,中央位置是一个QListWidget,用来显示音乐文件列表;下面一栏红色矩形是一个QVBoxLayout垂直布局部件,用来确定等会要建立的播放进度条的位置;而下面则是四个相关控制按钮。
大概地说,Phonon的工作机制是使用MediaObject来管理MediaSource即源文件,通过Path连接到AudioOutput,最后是由AudioOutput将数据发送到相关物理设备。
于是有了步骤二。
【步骤二】
步骤一是用来实现基本的界面,而步骤二是用代码实现具体的功能。
基于对Phonon的认识,有了以下四点:
①使用MediaObject管理媒体源
②使用AudioOutput连接物理设备
③使用SeekSlider实现进度条
④使用QList实现播放列表
于是产生了相应的代码:
并且需要在构造函数里面将
mediaObject 和
audioOutput 连接起来:
从而使得数据能从
mediaObject 到达
audioOutput ,再通过物理设备播放。
1、
要播放音乐首先需要有源文件,所以先实现添加文件的功能。
首先,将添加按钮和添加功能连接起来:
从而实现点击按钮激活相应操作的功能,而添加音乐文件的槽的代码如下:
上述代码是使用
QFileDialog 的
getOpenFileNames 方法获取若干个音乐文件,然后再使用
Qt 中的 foreach
遍历每个选中的文件,将其添加到播放列表中。
2、
播放、暂停和停止的基本实现
同样的先将信号和槽连接起来:
之后再具体实现相应的简单功能,这里列出
playFile 的代码:
首先判断列表是否为空,接着设置播放队列,然后播放当前文件,最后使得播放按钮不可用,而激活暂停按钮。其它的功能类似,都是使用
mediaObject 的方法。
【步骤三】
这里只简单地实现播放功能,当然还是可以再继续扩展功能,不过这是后话了。
运行的效果图如下:
此时就能听见蛮好听的《左边》了^_^
以下是全部代码:
mainwindow.h:
mainwindow.cpp:
main.cpp:
使用Qt做一个简易音乐播放器【Phonon浅谈--续】
在第一篇Phonon浅谈中提及到了Phonon这个多媒体框架的一些基本知识,于是想着结合这些基本知识来实践一番,做一个简单的音乐播放器。
【步骤一】
新建一个Qt Gui工程,在建立过程中需要包含Phonon模块,之后生成文件如下图:
Qt Gui工程会生成一个ui文件,在这里是mainwindow.ui。双击mainwindow.ui进行一番简单的布局,如下图:
关于这个ui界面,中央位置是一个QListWidget,用来显示音乐文件列表;下面一栏红色矩形是一个QVBoxLayout垂直布局部件,用来确定等会要建立的播放进度条的位置;而下面则是四个相关控制按钮。
大概地说,Phonon的工作机制是使用MediaObject来管理MediaSource即源文件,通过Path连接到AudioOutput,最后是由AudioOutput将数据发送到相关物理设备。
于是有了步骤二。
【步骤二】
步骤一是用来实现基本的界面,而步骤二是用代码实现具体的功能。
基于对Phonon的认识,有了以下四点:
①使用MediaObject管理媒体源
②使用AudioOutput连接物理设备
③使用SeekSlider实现进度条
④使用QList实现播放列表
于是产生了相应的代码:
Phonon::MediaObject *mediaObject; Phonon::AudioOutput *audioOutput; Phonon::SeekSlider *seekSlider; QList<Phonon::MediaSource> sourceList;//播放列表
并且需要在构造函数里面将
mediaObject 和
audioOutput 连接起来:
Phonon::createPath(mediaObject, audioOutput);
从而使得数据能从
mediaObject 到达
audioOutput ,再通过物理设备播放。
1、
要播放音乐首先需要有源文件,所以先实现添加文件的功能。
首先,将添加按钮和添加功能连接起来:
connect(this->ui->addBtn, SIGNAL(clicked()), this, SLOT(addFiles()));
从而实现点击按钮激活相应操作的功能,而添加音乐文件的槽的代码如下:
void MainWindow::addFiles(){ QStringList files = QFileDialog::getOpenFileNames(this, tr("Selec Files to play")); QString file; foreach(file, files){ this->ui->listWidget->addItem(file); sourceList.append(file); } }
上述代码是使用
QFileDialog 的
getOpenFileNames 方法获取若干个音乐文件,然后再使用
Qt 中的 foreach
遍历每个选中的文件,将其添加到播放列表中。
2、
播放、暂停和停止的基本实现
同样的先将信号和槽连接起来:
connect(this->ui->playBtn, SIGNAL(clicked()), this, SLOT(playFile())); connect(this->ui->pauseBtn, SIGNAL(clicked()), this, SLOT(pauseFile())); connect(this->ui->stopBtn, SIGNAL(clicked()), this, SLOT(stopFile()));
之后再具体实现相应的简单功能,这里列出
playFile 的代码:
void MainWindow::playFile(){ if(sourceList.isEmpty()){ QMessageBox::information(this, tr("no music files"), tr("no files to play")); return ; } mediaObject->setQueue(sourceList); mediaObject->play(); this->ui->playBtn->setEnabled(false); this->ui->pauseBtn->setEnabled(true); }
首先判断列表是否为空,接着设置播放队列,然后播放当前文件,最后使得播放按钮不可用,而激活暂停按钮。其它的功能类似,都是使用
mediaObject 的方法。
【步骤三】
这里只简单地实现播放功能,当然还是可以再继续扩展功能,不过这是后话了。
运行的效果图如下:
此时就能听见蛮好听的《左边》了^_^
以下是全部代码:
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <Phonon>
#include <QList>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void changeEvent(QEvent *e);
private slots:
void addFiles();
void playFile();
void pauseFile();
void stopFile();
private:
Ui::MainWindow *ui;
Phonon::MediaObject *mediaObject; Phonon::AudioOutput *audioOutput; Phonon::SeekSlider *seekSlider; QList<Phonon::MediaSource> sourceList;//播放列表
};
#endif // MAINWINDOW_H
mainwindow.cpp:
#include <QtGui>
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(this->ui->addBtn, SIGNAL(clicked()), this, SLOT(addFiles()));
connect(this->ui->playBtn, SIGNAL(clicked()), this, SLOT(playFile()));
connect(this->ui->pauseBtn, SIGNAL(clicked()), this, SLOT(pauseFile()));
connect(this->ui->stopBtn, SIGNAL(clicked()), this, SLOT(stopFile()));
mediaObject = new Phonon::MediaObject(this);
audioOutput = new Phonon::AudioOutput(this);
seekSlider = new Phonon::SeekSlider(this);
Phonon::createPath(mediaObject, audioOutput);
seekSlider->setMediaObject(mediaObject);
this->ui->seekLayout->addWidget(seekSlider);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void MainWindow::addFiles(){ QStringList files = QFileDialog::getOpenFileNames(this, tr("Selec Files to play")); QString file; foreach(file, files){ this->ui->listWidget->addItem(file); sourceList.append(file); } }
void MainWindow::playFile(){ if(sourceList.isEmpty()){ QMessageBox::information(this, tr("no music files"), tr("no files to play")); return ; } mediaObject->setQueue(sourceList); mediaObject->play(); this->ui->playBtn->setEnabled(false); this->ui->pauseBtn->setEnabled(true); }
void MainWindow::pauseFile(){
mediaObject->pause();
this->ui->pauseBtn->setEnabled(false);
this->ui->playBtn->setEnabled(true);
}
void MainWindow::stopFile(){
mediaObject->stop();
this->ui->pauseBtn->setEnabled(true);
this->ui->playBtn->setEnabled(true);
}
main.cpp:
#include <QtGui/QApplication> #include "mainwindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
相关文章推荐
- 使用Qt做一个简易音乐播放器【Phonon浅谈--续】
- Qt开发-使用QWebEngineView开发一个简易的浏览器(一)
- Linux下使用两个线程协作完成一个任务的简易实现
- python使用condition实现一个简易的栅栏,CyclicBarriar
- delphi使用BDE创建一个简易的dbf查询器
- 使用JavaScript应用for循环输出一个简易的9*9乘法表
- Servlet学习:(一)使用IDEA搭建一个简易的servlet程序
- Android 使用Service实现简易音乐播放器
- QT中phonon的安装和使用
- Python中使用wxPython开发的一个简易笔记本程序实例
- 使用QT实现一个图像处理软件1 —— 图片的加载和显示
- Qt动态布局,多个窗口使用同一个widget如何实现。
- [转]Qt中使用GridLayout如何设置一个按钮占两个位置
- 使用一个超简单的类实现一个简易服务器,明白Tomcat的运行机制
- Qt信号槽机制的实现(面试的感悟,猜测每一个类保存的一个信号和槽的二维表,实际使用函数指针 元对象 还有类型安全的检查设定等等)
- 使用PyQt4制作一个音乐播放器(1)
- 做了一个个人网站,想实现音乐播放器功能,而且想用火狐浏览器使用,求方法!
- 使用nodejs、Python写的一个简易HTTP静态文件服务器
- Qt中使用GridLayout如何设置一个按钮占两个位置
- 【Android】简易音乐播放器(介绍使用Service和Broadcast播放音乐文件)