简单的音乐播放器(VS 2010 + Qt 4.8.5)

  

昨天历经千辛万苦,配置好了VS 2010中的Qt环境(包括Qt for VS插件),今天决定浅浅地品味一下将两者结合进行编程的魅力。

上网查了一些资料,学习了一些基础知识,决定做一个简单的音乐播放器,主要用到Phonon多媒体框架。

Phonon的工作机制:

使用MediaObject来管理MediaSource即源文件,通过Path连接到AudioOutput,最后是由AudioOutput将数据发送到相关物理设备。

1、新建一个工程:文件->新建->项目:

选择Qt Application,本人命名为Player1;

*注意在此过程一定要把Phonon库选上:

简单的音乐播放器(VS 2010 + Qt 4.8.5)

2、创建好项目以后,可以看到VS自动生成了很多文件,先不用管它们:

简单的音乐播放器(VS 2010 + Qt 4.8.5)

1)双击Form目录下的player1.ui,进行控件的添加:

简单的音乐播放器(VS 2010 + Qt 4.8.5)

说明,从上到下分别是:

一个ListWeight(名:listWidget),

一个VerticalLayout(名:verticalLayout),

四个PushButton(名:addBtn,playBtn,pauseBtn,stopBtn)。

当然,各种属性可以自行设置及更改(颜色,大小等);

2)此时,需要的控件已添加完毕,可以保存,并回到VS主页对其进行右击->编译,ui_player1.h文件得到完善;

3、接下来就是各控件对应功能的实现,并进行信号与槽的连接:

1)先来看头文件"player1.h",类的名称在项目创建过程中也可以进行更改(默认为:项目名称+Class):

 

#ifndef PLAYER1_H 

#define PLAYER1_H  

#include <QMainWindow>  

#include <Phonon>  

#include <QList>  

#include "ui_player1.h"

  

class Player1Class : public QMainWindow

 {  

	Q_OBJECT  

public:  

	Player1Class(QWidget *parent = 0);  

	~Player1Class();  

protected:  

	void changeEvent(QEvent *e);  

private slots:  

	void addFiles();  

	void playFile();  

	void pauseFile();  

	void stopFile();  

private:  

	Ui::Player1Class *ui;  

	Phonon::MediaObject *mediaObject;  

	Phonon::AudioOutput *audioOutput;  

	Phonon::SeekSlider *seekSlider;  

	QList<Phonon::MediaSource> sourceList;//播放列表  

};  

#endif //PLAYER1_H

 

  2)源文件"player1.cpp"

#include <QtGui>  

#include "player1.h"  

#include "ui_player1.h"



Player1Class::Player1Class(QWidget *parent) :  

QMainWindow(parent),ui(new Ui::Player1Class)  

{  

	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->verticalLayout->addWidget(seekSlider);  

}  



Player1Class::~Player1Class()  

{  

	delete ui;  

}  



void Player1Class::changeEvent(QEvent *e)  

{  

	QMainWindow::changeEvent(e);  

	switch (e->type()) 

       {  

	     case QEvent::LanguageChange:  

		    ui->retranslateUi(this);  

		    break;  

	    default:  

		    break;  

       }  

}  



void Player1Class::addFiles()

{  

	QStringList files = QFileDialog::getOpenFileNames(this, tr("Select Files to play"));  

	QString file;  

	foreach(file, files)

        {  

		this->ui->listWidget->addItem(file);  

		sourceList.append(file);  

	}  

}  



void Player1Class::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 Player1Class::pauseFile()

{  

	mediaObject->pause();  

	this->ui->pauseBtn->setEnabled(false);  

	this->ui->playBtn->setEnabled(true);  

}  



void Player1Class::stopFile()

{  

	mediaObject->stop();  

	this->ui->pauseBtn->setEnabled(true);  

	this->ui->playBtn->setEnabled(true);  

}  

  3)主函数文件"main.cpp"

#include <QtGui/QApplication>  

#include "player1.h"  



int main(int argc, char *argv[])  

{  

	QApplication a(argc, argv);  

	Player1Class w;  

	w.show();  

	return a.exec();  

}

  4、至此,便可以进行整个项目的编译、运行,结果为:

简单的音乐播放器(VS 2010 + Qt 4.8.5)

一首张宇的"给你们"先给大家。谢谢!

 

  

 

 

 

 

 

你可能感兴趣的:(播放器)