簡單的音樂播放器(VS 2010 + Qt 4.8.5)

  

昨天曆經千辛萬苦,配置好了VS 2010中的Qt環境(包括Qt for VS插件),今天決定淺淺地品味一下將二者結合進行編程的魅力。編程

上網查了一些資料,學習了一些基礎知識,決定作一個簡單的音樂播放器,主要用到Phonon多媒體框架。app

Phonon的工做機制:框架

使用MediaObject來管理MediaSource即源文件,經過Path鏈接到AudioOutput,最後是由AudioOutput將數據發送到相關物理設備。ide

一、新建一個工程:文件->新建->項目:函數

選擇Qt Application,本人命名爲Player1;學習

*注意在此過程必定要把Phonon庫選上:ui

二、建立好項目之後,能夠看到VS自動生成了不少文件,先不用管它們:this

1)雙擊Form目錄下的player1.ui,進行控件的添加:spa

說明,從上到下分別是:插件

一個ListWeight(名:listWidget),

一個VerticalLayout(名:verticalLayout),

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

固然,各類屬性能夠自行設置及更改(顏色,大小等);

2)此時,須要的控件已添加完畢,能夠保存,並回到VS主頁對其進行右擊->編譯,ui_player1.h文件獲得完善;

三、接下來就是各控件對應功能的實現,並進行信號與槽的鏈接:

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();  
}

  四、至此,即可以進行整個項目的編譯、運行,結果爲:

一首張宇的"給大家"先給你們。謝謝!

相關文章
相關標籤/搜索