简单的音乐播放器(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、至此,便可以进行整个项目的编译、运行,结果为:
一首张宇的"给你们"先给大家。谢谢!
简单的音乐播放器(VS 2010 + Qt 4.8.5)的更多相关文章
- swift3.0 简单直播和简单网络音乐播放器
本项目采用swift3.0所写,适配iOS9.0+,所有界面均采用代码布局. 第一个tab写的是简单直播,传统MVC模式,第二个tab写的是简单网络音乐播放器.传说MVVM模式(至于血统是否纯正我就不 ...
- 用PHP+H5+Boostrap做简单的音乐播放器(进阶版)
前言:之前做了一个音乐播放器(纯前端),意外的受欢迎,然后有人建议我把后台一起做了,正好也想学习后台,所以学了两天php(不要吐槽我的速度,慢工出细活嘛~)然后在之前的基础上也又完善了一些功能,所以这 ...
- 用H5+Boostrap做简单的音乐播放器
前言:这个是综合一下我最近在学的东西做的小Demo,到实际使用还有距离,但是用来练手巩固知识点还是不错的,最近在二刷JS书和Boostrap.css的源码,做完这个Demo也算是暂告一段落,接下来是j ...
- 使用Service组件实现简单的音乐播放器功能 --Android基础
1.本例利用Service实现简单的音乐播放功能,下面是效果图.(点击开始播放开启服务,音乐播放,点击“停止播放”关闭服务,音乐停止播放.) 2.核心代码: MusicService.java: pa ...
- Android课程---简单的音乐播放器
第一个:用Activity实现 activity_music_play1.xml <?xml version="1.0" encoding="utf-8" ...
- HTML5+CSS3+jquery实现简单的音乐播放器
...最近天热的,感觉就像煎饼...然后别人在把妹子的时候,只有偶们这帮苦逼的程序员在那边撸代码...我日哦! 然后今天晒的是偶早年写的一个播放器...看上去是不是很有感觉的样子!一番宝物,Lisa唱 ...
- Android——用Activity和Service实现简单的音乐播放器
一.只用Activity 容易出现问题 xml <?xml version="1.0" encoding="utf-8"?> <LinearL ...
- Android开发6:Service的使用(简单音乐播放器的实现)
前言 啦啦啦~各位好久不见啦~博主最近比较忙,而且最近一次实验也是刚刚结束~ 好了不废话了,直接进入我们这次的内容~ 在这篇博文里我们将学习Service(服务)的相关知识,学会使用 Service ...
- Android实现简单音乐播放器(MediaPlayer)
Android实现简单音乐播放器(MediaPlayer) 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能 ...
随机推荐
- SQL 报错信息整理及解决方案(持续更新)
整理一下自己遇见过的 SQL 各种报错信息及相应解决方法,方便以后查阅,主要平台为 Oracle: ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值: 原因:插入操作时,数据大于字段 ...
- 烂泥:KVM使用裸设备配置虚拟机
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 何谓裸设备?百度百科显示: 裸设备(raw device),也叫裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊块设备文件 ...
- python lambda表达式简单用法
习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: 1 2 3 4 5 6 7 8 # 普通条件语句 if 1 == 1: name = 'wupeiqi' else ...
- struts2 redirect 配置动态传递参数
<action name="actionName" class="com.towerking.TestAction" method="execu ...
- selenium如何操作cookies实现免登录
执行接口测试或者某些自动化测试时,为了避免每次访问接口都需要登录操作,可以用访问接口时,把cookies信息传过去. 思路是先登录一次页面,获取到cookies信息,把cookies信息保存到本地文件 ...
- Javascript 中的闭包和引用
Javascript 中一个最重要的特性就是闭包的使用.因为闭包的使用,当前作用域总可以访问外部的作用域.因为Javascript 没有块级作用域,只有函数作用域,所以闭包的使用与函数是紧密相关的. ...
- POJ 1515 Street Directions --一道连通题的双连通和强连通两种解法
题意:将一个无向图中的双向边改成单向边使图强连通,问最多能改多少条边,输出改造后的图. 分析: 1.双连通做法: 双连通图转强连通图的算法:对双连通图进行dfs,在搜索的过程中就能按照搜索的方向给所有 ...
- 两道相似KMP题
1.POJ 3450 Coporate Identity 这两题的解法都是枚举子串,然后匹配,像这种题目以后可以不用KMP来做,直接字符串自带的strstr函数搞定,如果字符串未出现,该函数返回NUL ...
- MATLAB基本命令
eye(n)创建n阶单位矩阵 zeros(n)创建n阶0方阵 rand(m,n)创建m*n阶元素为从0到1的均匀分布的随机数矩阵 round(A)对矩阵A中所有元素进行四舍五入运算 A^-1用幂运算求 ...
- Spring 4.1+ 的 JSONP使用
如今的巨石应用已经越来越不行了,很多互联网在后期都会在用分布式的架构 那么在页面上不同的服务调用不同域名下的json是有问题的 (跨域:不同域名,相同域名但是不同端口) JavaScript规范中提到 ...