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


      

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

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

    Phonon的工作机制:

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

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

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

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

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

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

    说明,从上到下分别是:

    一个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、至此,便可以进行整个项目的编译、运行,结果为:

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

      

     

     

     

     

  • 相关阅读:
    各类电压标准
    intel-FPGA的片内存储器问题
    基于FPGA的DDS设计(二)
    SpringCloud整合SpringBootActuator
    SpringCloud搭建项目遇到的问题
    第一章 PostGreSQL安装
    Maven环境变量
    JDK环境变量配置
    switch(expression)支持和不支持的数据类型
    @RequestMapping、@ResponseBody和@RequestBody的使用
  • 原文地址:https://www.cnblogs.com/tgyf/p/3233051.html
Copyright © 2020-2023  润新知