Qt仿音乐播放器:媒体类

一、铺垫

我暂时只会音频系列的操作,我只能演示音频部分;但是QMediaPlayer是一个可以播放视频、音频的类;请同学们细读官方文档;

二、头文件

#include<QMediaPlayer>        头文件

#include<QMediaPlaylist>

三、演示 

我会先演示套路;再补充细节:

QMediaPlayer* player=new QMediaPlayer(this); //创建对象,并挂在对象树上
QMediaPlaylist* playList=new QMediaPlaylist(this);//创建对象,并挂在对象树上//2.设置默认播放模式
playList->setPlaybackMode(QMediaPlaylist::Random);//设置播放回放模式为随机循环//3.将播放列表设置到播放媒体对象中;
player->setPlaylist(playList);

细节:

QMediaPlayer:我愿意称之为是一个播放者

QMediaPlaylist:称之为播放列表

当将播放列表设置到播放者里时,播放者就是按照播放列表来依次播放内容

四、常用函数

请原谅我使用英文,允许我解释

1.软件是外国的,我翻译再牛逼,也是半吊子,带有我自己的个人色彩;

2.我行告诉诸位同学;都是从官方文档中找的,请诸君共勉;

3.1 播放者常用函数

QMediaPlayer* player=new QMediaPlayer(this); //创建播放者,并挂在对象树上

player->setVolume(20);        //设置默认音量大小-默认设置成20%

player->state()                      //获取播放者的状态;播放、暂停或停止状态

player->setMuted(bool);       //设置是否静音

play->play()                          //Start or resume playing the current source.音乐播放

player->pause()                   //Pause playing the current source.音乐停止

player->stop()                      //Stop playing, and reset the play position to the beginning

                                            //停止播放,并将播放位置重置为刚开始的位置;

player->setPlaylist(playList);//将播放列表设置到播放媒体对象中;

3.2 信号

[signal]QMediaPlayer::stateChanged(QMediaPlayer::State state)        //当播放者状态改变//时,发出信号;比如播放暂停,播放开始,播放停止,状态由一个变为另一个,信号发射

[signal]QMediaPlayer::durationChanged(qint64 duration)       //当媒体源的时间发生改变,发出信号实际就是你切歌时,两首歌曲时间改变,发出信号

[signal] void QMediaPlayer::positionChanged(qint64 position) //歌曲播放时,时间在变化

                //因为是二进制流,所以位置变化,发出信号;

[signal] void QMediaObject::metaDataAvailableChanged(bool available)//媒体源成功获取并

                //改变,发出信号;

 通过原数据抓取歌曲封面——这个这是绝了

//获取封面图,通过元数据来获取
QVariant coverimage = player->metaData("ThumbnailImage");//获取缩略图if(coverimage.isValid()){
QImage image=coverimage.value<QImage>();
ui->musicCover->setPixmap(QPixmap::fromImage(image));
currentPage->setMusicImage(QPixmap::fromImage(image));
}
else{
qDebug()<<"歌曲没有封面图";
//可以设置成默认的图片
QString path=":/image/rec/031.png";
ui->musicCover->setPixmap(path);
currentPage->setMusicImage(path);
}

3.3播放列表常用函数 

QMediaPlaylist* playList=new QMediaPlaylist(this);//创建对象,并挂在对象树上

playList->setPlaybackMode(QMediaPlaylist::Random);//设置播放回放模式为随机循环 playList->clear();//清空之前playlist中的歌曲

playList->addMedia(music.getMusicUrl());        //向播放列表中添加播放源的Url

playList->setCurrentIndex(index);//默认从第0首开始播放

playList->previous();//Return to the previous media content in playlist.上一曲

playList->next(const QMediaContent &content);//Advance to the next media content in                                                                                     //playlist.下一曲;

playList->playbackMode()//获取当前的播放模式;

3.4信号

[signal] void QMediaPlaylist::playbackModeChanged(QMediaPlaylist::PlaybackMode mode)

//播放模式发生改变时,发出信号;随机模式,循环模式,单曲循环模式

[signal] void QMediaPlaylist::currentIndexChanged(int position)//切换歌曲时,当前的索引会发生改变,,发出信号;

3.5addMedia();细节

那么如何往播放列表里填充数据呢?此类中有一个函数时addMedia();向播放列表中添加媒体源(所谓的添加媒体源;并不是真正的把二进制数据加载到内存;而是给了一个地址)

playList->addMedia(music.getMusicUrl());

 他有两个重载类型,一个是单纯的类,一个是填一个容器类;我们单讲第一个;

bool QMediaPlaylist::addMedia(const QMediaContent &content)

bool QMediaPlaylist::addMedia(const QList<QMediaContent> &items)

QMediaContent的构造函数

QMediaContent(const QUrl &url)       

 这就与我们前面所讲的QUrl连在一起;使用QUrl来构建QMediaContent,再构建QMediaPlaylist播放列表;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/66691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java随机数Random类

在 Java 中&#xff0c;Random 类用于生成随机数。它是 java.util 包的一部分&#xff0c;可以生成不同类型的随机数&#xff0c;例如整数、浮点数、布尔值等。Random 类的实例可以用来产生各种随机数据&#xff0c;广泛应用于游戏、测试、加密、数据模拟等场景。 1. 创建 Ran…

解决cursor50次使用限制问题并恢复账号次数

视频内容&#xff1a; 在这个视频教程中&#xff0c;我们将演示如何解决科sir软件50次使用限制的问题&#xff0c;具体步骤包括删除和注销账号、重新登录并刷新次数。教程详细展示了如何使用官网操作将账号的剩余次数恢复到250次&#xff0c;并进行软件功能测试。通过简单的操…

js监测页面可见性

监测切换页面 检测页面的可见性状态document.visibilityState:document.hiddenvisibilitychange 事件 js 检测页面切换至别的应用 检测页面的可见性状态 在JavaScript中&#xff0c;你可以使用Page Visibility API来检测页面的可见性状态。这个API提供了一组接口&#xff0c;允…

微信小程序开发设置支持scss文件

在微信小程序开发中&#xff0c;默认是不支持scss文件的&#xff0c;创建文件的时候&#xff0c;css文件默认创建的是wxss后缀结尾的&#xff0c;但是用习惯了scss的怎么办呢&#xff1f; 首先找到project.config.json文件&#xff0c;打开文件在setting下设置useCompilerPlug…

Matlab Steger提取条纹中心(非极大值抑制)

文章目录 一、简介二、实现代码三、实现效果一、简介 由于在确定条纹的ROI区域之后,会计算出多个条纹中心坐标,因此这里就需要对其进行则优选择,毕竟条纹只有一条,这最简单的方式就是使用非极大值抑制,即选择每一行/列最好的条纹中心。 二、实现代码 Hessian2D.m function…

Apache Hadoop YARN框架概述

一、YARN产生和发展简史 1.1背景 数据、程序、运算资源&#xff08;内存、CPU&#xff09;三者组在一起&#xff0c;才能完成数据的计算处理过程。在单机环境下&#xff0c;三者之间协调配合不是太大问题。为了应对海量数据的处理场景&#xff0c;Hadoop软件出现并提供了分布…

计网C1C2C3答案自用

Chapter 1 Computer Network and the Internet Review Questions Solution R1. What is the difference between a host and end system? List several different types of end system. Is a Web server an end system? There is no difference between a host and an end …

江科大STM32入门——UART通信笔记总结

wx&#xff1a;嵌入式工程师成长日记 1、简介 简单双向串口通信有两根通信线(发送端TX和接收端RX)TX与RX要交叉连接当只需单向的数据传输时&#xff0c;可以只接一根通信线当电平标准不一致时&#xff0c;需要加电平转换芯片 传输模式&#xff1a;全双工&#xff1b;时钟&…

KG-CoT:基于知识图谱的大语言模型问答的思维链提示

一些符号定义 知识图谱实体数量&#xff1a; n n n 知识图谱中关系类型数量&#xff1a; m m m 三元组矩阵&#xff1a; M ∈ { 0 , 1 } n n m \textbf{M} \in \{0, 1\}^{n \times n \times m} M∈{0,1}nnm&#xff0c; M i j k 1 M_{ij}^k 1 Mijk​1则说明实体 i i i和实…

面试加分项:Android Framework PMS 全面概述和知识要点

在Android面试时,懂得越多越深android framework的知识,越为自己加分。 目录 第一章:PMS 基础知识 1.1 PMS 定义与工作原理 1.2 PMS 的主要任务 1.3 PMS 与相关组件的交互 第二章:PMS 的核心功能 2.1 应用安装与卸载机制 2.2 应用更新与版本管理 2.3 组件管理 第…

【简单了解一下深度学习】

深度学习是机器学习的一个子领域&#xff0c;它主要利用多层神经网络来学习数据的高层特征和抽象表示。以下是关于深度学习的一些基础知识和概念&#xff1a; 基本概念 神经网络&#xff1a;深度学习的核心是神经网络&#xff0c;它由多个层次的神经元组成。每个神经元接收输…

超完整Docker学习记录,Docker常用命令详解

前言 关于国内拉取不到docker镜像的问题&#xff0c;可以利用Github Action将需要的镜像转存到阿里云私有仓库&#xff0c;然后再通过阿里云私有仓库去拉取就可以了。 参考项目地址&#xff1a;使用Github Action将国外的Docker镜像转存到阿里云私有仓库 一、Docker简介 Do…

AIGC 新浪潮|Story CN meetups 将于 1 月 10-14 日举办!

随着 Web3 行业发展进入全新阶段&#xff0c;与生成式人工智能&#xff08;AIGC&#xff09;技术融合正在创造潜力新星项目。也是目前的互联网生态下&#xff0c;任何普通民众都有权利创作高质量的音乐、艺术、散文和视频内容&#xff0c;带来了用户生成内容&#xff08;UGC&am…

Python基于YOLOv8和OpenCV实现车道线和车辆检测

使用YOLOv8&#xff08;You Only Look Once&#xff09;和OpenCV实现车道线和车辆检测&#xff0c;目标是创建一个可以检测道路上的车道并识别车辆的系统&#xff0c;并估计它们与摄像头的距离。该项目结合了计算机视觉技术和深度学习物体检测。 1、系统主要功能 车道检测&am…

设计模式学习笔记——结构型模式

文章目录 适配器模式 Adapter适用场景UML 桥接模式 Bridge适用场景UML 组合模式 Composite装饰模式 Decorator外观模式 Facade享元模式 Flyweight代理模式 Proxy 适配器模式 Adapter 适用场景 希望使用某个类&#xff0c; 但是其接口与其他代码不兼容时&#xff0c; 可以使用…

rust如何在类中保存一个闭包,它可以捕获类自己?

首先这个为什么在 Rust 中这么难实现&#xff1f; 我们得承认一个残酷的现实&#xff1a;Rust 不是 C。在 C 中&#xff0c;可以随心所欲地使用引用&#xff0c;编译器不会过多干涉。但在 Rust 中&#xff0c;编译器会像严厉的监管者一样盯着我们的每一个动作&#xff0c;生怕…

黑马跟学.苍穹外卖.Day04

黑马跟学.苍穹外卖.Day04 苍穹外卖-day04课程内容1. Redis入门1.1 Redis简介1.2 Redis下载与安装1.2.1 Redis下载1.2.2 Redis安装 1.3 Redis服务启动与停止1.3.1 服务启动命令1.3.2 客户端连接命令1.3.3 修改Redis配置文件1.3.4 Redis客户端图形工具 2. Redis数据类型2.1 五种常…

SOLID原则学习,开闭原则

文章目录 1. 定义2. 开闭原则的详细解释3. 实现开闭原则的方法4. 总结 1. 定义 开闭原则&#xff08;Open-Closed Principle&#xff0c;OCP&#xff09;是面向对象设计中的五大原则&#xff08;SOLID&#xff09;之一&#xff0c;由Bertrand Meyer提出。开闭原则的核心思想是…

filebeat、kafka

elk的架构 es数据库&#xff1a;非关系型数据库&#xff0c;json格式 logstash&#xff1a;收集日志 kibana&#xff1a;图形化的工具 ↓ 以上三种结合起来即为日志收集系统 filebeat 作用&#xff1a;filebeat是一款轻量级的日志收集工具&#xff0c;不依赖java环境&…

Qt重写webrtc的demo peerconnection

整个demo为&#xff1a; 可以选择多个编码方式&#xff1a; cmake_minimum_required(VERSION 3.5)project(untitled LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_INCLUDE_CURRENT_DIR ON)set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)set(CMA…