确定基本功能

基本功能包括:
1.播放
2.上一首/下一首
3.静音
4.播放方式
5.进度条
6.添加音乐
7.显示歌曲的表格
实现方式:
首先,我们需要几个控件(pushbutton,listwidget,slider,label);
界面如下:

此图片,大家可以先不把这些东西全部写上去,
先把我写的功能加上就可以。
我们一个一个来:
1.添加音乐

//类中加入:QMediaPlaylist * playlist;//播放列表//搜索按钮槽函数
QString curPash =QDir::currentPath();QString dlgTitle="选择音频文件";QString filter="音频文件(*.mp3 *.wav *.wma)mp3文件(*.mp3);;wav文件(*.wav);;wma文件(*.wma);;所有文件(*.*)";QStringList fileList = QFileDialog::getOpenFileNames(this,dlgTitle,curPash,filter);if(fileList.count()<1)return;for(int i = 0;i<fileList.count();i++){QString aFile = fileList.at(i);//qDebug()<<aFile;playlist->addMedia(QUrl::fromLocalFile(aFile));QFileInfo fileInfo(aFile);ui->listWidget->addItem(fileInfo.fileName());}if(player->state()!=QMediaPlayer::PlayingState){playlist->setCurrentIndex(m_Value);}player->setPlaylist(playlist);

这个过程中,一定要注意在构造函数中,将播放器和播放列表new出来,并设置基本格式。

2.播放音乐

// 类中加入:
QMediaPlayer * player;//播放器
bool m_IsPause = true;//判断播放器状态if(m_IsPause==true)//false 为播放{ui->pushButton_3->setStyleSheet("border-image: url(:/kjt/bf.png);");m_IsPause = false;player->pause();return;}m_IsPause = true;ui->pushButton_3->setStyleSheet("border-image: url(:/kjt/1zantingtingzhi.png);");player->play();

这里要注意一点:当播放的时候和暂停的时候,图标的颜色应当有改变,所以加了一个状态判断。
3.上一首/下一首

//类中加入:int m_Value=0;//当前歌曲是第几个int m_Amount=0;   //总歌曲数量
//上一首
void musicplaywindow::on_pushButton_2_clicked()//上一首
{m_Amount = playlist->mediaCount();if(m_Value == 0){m_Value=m_Amount;playlist->setCurrentIndex(m_Value);if(m_IsPause==true){player->play();}return;}playlist->setCurrentIndex(--m_Value);if(m_IsPause==true){player->play();}
}
//下一首
void musicplaywindow::on_pushButton_4_clicked()//下一首
{m_Amount = playlist->mediaCount();//总数if(m_Value == m_Amount){m_Value =0;playlist->setCurrentIndex(m_Value);if(m_IsPause==true){player->play();}return;}playlist->setCurrentIndex(++m_Value);if(m_IsPause==true){player->play();}
}

这个要注意:我们在上一首下一首的过程中,肯定要知道当前是第几首,为了能够在第一首和最后一首的时候可以循环一次进行,我们需要通过总歌曲数量进行判断。
4.声音
声音有两种表现形式:
一种是直接按小喇叭,一种是进度条的拖动

//
bool m_IsVolume = false;//判断是否静音void musicplaywindow::on_pushButton_6_clicked()//静音
{if(m_IsVolume ==true)//ture为无声{m_IsVolume = false;ui->pushButton_6->setStyleSheet("border-image: url(:/kjt/shengyin.png);");player->setVolume(ui->horizontalSlider_2->value());return;}m_IsVolume = true;ui->pushButton_6->setStyleSheet("border-image: url(:/kjt/jingyin.png);");player->setVolume(0);
}void musicplaywindow::on_horizontalSlider_2_valueChanged(int value)//声音大小
{player->setVolume(value);
}

进度条的拖拽此处是用了值改变,所以拖动过程就会改变声音的大小。

5.播放方式

//
int m_IsMode;//播放模式//
if(m_IsMode == 0)//顺序播放{ui->pushButton_5->setStyleSheet("border-image: url(:/kjt/danqu.png);");m_IsMode++;playlist->setPlaybackMode(QMediaPlaylist::Sequential);//顺序return;}if(m_IsMode == 1)//循环播放{ui->pushButton_5->setStyleSheet("border-image: url(:/kjt/xunhuan.png);");m_IsMode++;playlist->setPlaybackMode(QMediaPlaylist::Loop);//设置循环模式return;}if(m_IsMode == 2)//单曲循环{ui->pushButton_5->setStyleSheet("border-image: url(:/kjt/danquxunhuan.png);");m_IsMode++;//playlist->setPlaybackMode(QMediaPlaylist::);//return;}if(m_IsMode == 3)//随机{ui->pushButton_5->setStyleSheet("border-image: url(:/kjt/suiji.png);");m_IsMode =0;playlist->setPlaybackMode(QMediaPlaylist::Random);//随机播放return;}

单曲循环并没有实现,后续实现了会在后续说明。
6.播放进度条

 connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(onPositionChanged(qint64)));connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(onDurationChanged(qint64)));void musicplaywindow::onDurationChanged(qint64 duration)//获取歌曲总时长
{ui->horizontalSlider->setMaximum(duration); int secs = duration/1000; int mins = secs/60;secs = secs % 60;durationTime = QString::asprintf("%d:%d",mins,secs);ui->label->setText(positionTime+"/"+durationTime);
}void musicplaywindow::onPositionChanged(qint64 position)//获取当前时长并做出改变
{if(ui->horizontalSlider->isSliderDown())return;ui->horizontalSlider->setSliderPosition(position);int secs = position/1000;int mins = secs/60;secs = secs % 60;positionTime = QString::asprintf("%d:%d",mins,secs);ui->label->setText(positionTime+"/"+durationTime);
}void musicplaywindow::on_horizontalSlider_valueChanged(int value)
{player->setPosition(ui->horizontalSlider->value());
}

这里要注意几点:
1.获取歌曲总时长,从而获取进度条长度,以及label的总时长
2.获取当前歌曲时长,从而获取进度条当前值,以及label的时长。
3.positionChanged是播放器持续时间的更改(播放器当前时间变化时触发)
4.durationChanged是播放器总时间的更改(时长发生变化时触发)

QT下的音乐播放器 (一)相关推荐

  1. 基于QT的网络音乐播放器(一)

    自学Qt已经有一段时间了,但是始终感觉自己还是很弱(其实并不是感觉自己很弱,是自己本来就很弱,哈哈).自己也照着书上敲了几个例子,但觉得还是要写点东西才能真正运用起来.所以,前段时间就写了个很简单的音 ...

  2. 树莓派3B qt+mplayer制作音乐播放器(10)

    内容 树莓派3B qt+mplayer制作音乐播放器:播放.暂停.上一曲.下一曲,音量调节. 平台:树莓派+qt+mplayer 1.配置 qt安装见此: https://blog.csdn.net/ ...

  3. 【基于Qt的在线音乐播放器】

    基于Qt的在线音乐播放器 项目功能: 本在线音乐播放器的功能在于创建一个音乐播放器页面,可以实现搜索功能通过HTTP协议获取网络中数据并解析出来,播放搜索到的歌曲并展示相关信息.效果如图: 相关类及功 ...

  4. 基于QT开发的音乐播放器(附源码)

    基于QT开发的音乐播放器(附源码) 一.简介 1.介绍 2.功能描述 3.系统功能层次模块图 4.各模块功能描述 (1)播放界面 (2)歌词 (3)歌曲信息 (4)歌曲列表 5.文件格式 6.运行环境 ...

  5. 鸿蒙系统怎样去掉下拉音乐播放器,windows10系统下怎样取消音乐播放器默认播放器...

    一位用户反馈自己的windows10系统电脑中,默认音乐播放器是百度音乐,因为自己并不喜欢用百度音乐来播放歌曲,就想将其取消掉.这该如何操作呢?接下来,就随小编看看windows10系统下取消音乐播放 ...

  6. 基于Qt的网络音乐播放器(四)酷狗API接口获取歌曲的搜索列表和歌曲的播放

    2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 文章目录 1.效果图 2.准备好前面获取的酷狗api接口 3.网络歌曲搜索实现 4.网络歌曲播放的实现 ...

  7. 项目记录:基于QT的简易音乐播放器

    一.功能介绍 1.能够自定义背景图片 2.实现了音乐播放器的最基本功能,即播放与否.切换歌曲及歌单.显示歌曲信息.调节音量.播     放模式等 3.根据所选中的框体,更新播放列表及播放顺序 4.从播 ...

  8. 基于Qt的在线音乐播放器

    1.了解音乐播放器应该有哪些功能: 音乐播放器的各种控制(上下曲,单曲循环,随机播放,顺序播放),歌曲列表,歌词显示,本地音乐保存,在线音乐搜索,在线音乐播放. 2.制作Qt音乐播放器一定要了解Qme ...

  9. 自学QT之简易音乐播放器基于QT5.5

    自己写的音乐播放器,还存在很多bug,只是作为一种尝试而已.交流学习群:271251545 播放器实现的功能:添加歌曲.上一首.暂停.下一首.切换歌曲.托盘.任务栏对歌曲进行操作 界面偷懒,直接使用的 ...

  10. QT设计实现音乐播放器的基本功能

    通过QT对madplay的应用,实现音乐播放器的功能,包括开始播放.暂停播放.继续播放.终止播放.播放上一首.播放下一首.添加指定目录下的音乐.删除指定歌曲.清空列表.应用到QFileDialog.Q ...

最新文章

  1. 跨站脚本攻击(XSS)FAQ
  2. 深度学习-Tensorflow2.2-tf.data输入模块{2}-tf.data基础用法-09
  3. SEO的有利因素跟不利因素
  4. hadoop高速扫盲帖,从零了解hadoop
  5. 链表之删除链表a/b处的节点
  6. xml vs db.properties
  7. Docker学习篇(一)Docker概述、安装和常用命令
  8. Sharding-JDBC(实现读写分离)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记014
  9. 数据库和缓存一致性分析
  10. qzone.class.php,PHP QQ登录接口应用_PHP教程 - str_repeat
  11. C# 子类实例化基类 基类使用不了子类的方法_C# 接口与抽象类实例分析
  12. RGSS3A解包器,拆包算法
  13. 【OpenCV学习】cvtColor
  14. 【Hive】解析复杂json格式字段
  15. 晚清十大武林高手(电视里常引用的真实人物)
  16. 苹果开发者账号申请及升级更换
  17. 华为设备AP管理命令
  18. 蜘蛛能抓取thinkphp的html页面,搜索引擎的蜘蛛是如何爬的,如何吸引蜘蛛来抓取页面...
  19. addEventListener()使用方法
  20. 616 给字符串添加加粗标签

热门文章

  1. PDF文件有密码怎么解除?
  2. shl归纳推理测试题库_笔经总结含征服shl功略
  3. scratch项目-会走路的小猫
  4. php mysql房屋中介管理系统_基于是用PHP+MySQL实现在线租房管理系统.doc
  5. hadoop启动HDFS命令
  6. HP UNIX下载工具的一个好地方
  7. VB2010(29)Web部署应用程序
  8. openssl ca文档翻译
  9. 在幼儿园实施亲自然生态教育的思考
  10. 地籍图宗记注记标注实现