【QT】Qt 音视频

news2024/11/18 15:42:47

Qt 音视频

  • Qt 音视频
    • 1. Qt 音频
    • 2. Qt 视频

Qt 音视频

在 Qt 中,音频主要是通过 QSound 类来实现。但是需要注意的是 QSound 类只支持播放 wav 格式的音频文件。也就是说如果想要添加音频效果,那么首先需要将非 wav 格式的音频文件转换为 wav 格式。

通过帮助手册查看 QSound 类如下:

在这里插入图片描述

注意:使用 QSound 类时,需要添加模块:multimedia

1. Qt 音频

核心 API :

				play() 开始或继续播放当前源

示例代码:

1、首先在 .pro 文件中加入模块:

在这里插入图片描述

2、界面如下:

在这里插入图片描述

3、引入声音文件:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4、widget.cpp 文件如下:

			#include <QSound>
			
			Widget::Widget(QWidget *parent)
			    : QWidget(parent)
			    , ui(new Ui::Widget)
			{
			    ui->setupUi(this);
			
			    // 实例化对象
			    QSound* sound = new QSound(":/sound.wav", this);
			
			    connect(ui->pushButton, &QPushButton::clicked, [=](){
			        sound->play();  // 播放
			    });
			}

2. Qt 视频

在 Qt 中,视频播放的功能主要是通过 QMediaPlayer 类和 QVideoWidget 类来实现。在使用这两个类时要添加对应的模块 multimediamultimediawidgets.

核心 API:

			setMedia() 设置当前媒体源。
			setVideoOutput() 将QVideoWidget视频输出附加到媒体播放器。如果媒体播放器已经附加了视频输出,将更换⼀个新的。

示例代码:

1、首先在 .pro 文件中添加模块:

在这里插入图片描述

2、widget.h 程序如下:

			#include <QWidget>
			#include <QHBoxLayout>  // 水平布局
			#include <QVBoxLayout>  // 垂直布局
			#include <QVideoWidget> // 显示视频
			#include <QMediaPlayer> // 播放声音
			#include <QPushButton>  // 按钮
			#include <QStyle>       // 设置图标
			#include <QFileDialog>  // 选择文件/文件夹
			
			QT_BEGIN_NAMESPACE
			namespace Ui { class Widget; }
			QT_END_NAMESPACE
			
			class Widget : public QWidget
			{
			    Q_OBJECT
			
			public:
			    Widget(QWidget *parent = nullptr);
			    ~Widget();
			    
			public slots:
			    void closeVideo();
			
			private:
			    QMediaPlayer* mediaPlayer;
			    QVideoWidget* videoWidget;
			    QVBoxLayout* vbox;
			    
			    // 创建两个按钮:选择视频按钮和开播放按钮
			    QPushButton* chooseBtn, *playBtn;
			
			private:
			    Ui::Widget *ui;
			};

3、widget.cpp 程序如下:

			#include <QMediaPlayer>
			#include <QSlider>
			
			Widget::Widget(QWidget *parent)
			    : QWidget(parent)
			{
			    // 对象实例化
			    mediaPlayer = new QMediaPlayer(this);
			    videoWidget = new QVideoWidget(this);
			
			    // 设置播放画面的窗口
			    videoWidget->setMinimumSize(600, 600);
			
			    // 实例化窗口布局 --- 垂直布局
			    this->vbox = new QVBoxLayout(this);
			    this->setLayout(this->vbox);
			
			    // 实例化选择视频按钮
			    chooseBtn = new QPushButton("选择视频", this);
			
			    // 实例化播放按钮
			    playBtn = new QPushButton(this);
			
			    // 设置图标代替文件
			    playBtn->setIcon(this->style()->standardIcon(QStyle::SP_MediaPlay));
			
			    // 实例化一个水平布局,将以上控件放入水平布局中
			    QHBoxLayout* hbox = new QHBoxLayout;
			
			    // 添加控件
			    hbox->addWidget(chooseBtn);
			    hbox->addWidget(playBtn);
			
			    // 将播放窗口和水平布局都添加到垂直布局中
			    vbox->addWidget(videoWidget);
			
			    // 布局中添加布局
			    vbox->addLayout(hbox);
			
			    // 将选择视频对应的按钮和槽函数进行关联
			    connect(chooseBtn, &QPushButton::clicked, this, &Widget::chooseVideo);
			}
			
			void Widget::chooseVideo()
			{
			    // 选择视频,返回一个播放视频的名字
			    QString name = QFileDialog::getSaveFileName(this, "选择视频", ".", "WMV(*.wmv)");
			
			    // 设置媒体声音
			    mediaPlayer->setMedia(QUrl(name));
			
			    // 输出视频画面
			    mediaPlayer->setVideoOutput(videoWidget);
			
			    // 播放
			    mediaPlayer->play();
			}

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

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

相关文章

MySQL 5.7 DDL 与 GH-OST 对比分析

作者&#xff1a;来自 vivo 互联网存储研发团队- Xia Qianyong 本文首先介绍MySQL 5.7 DDL以及GH-OST的原理&#xff0c;然后从效率、空间占用、锁阻塞、binlog日志产生量、主备延时等方面&#xff0c;对比GH-OST和MySQL5.7 DDL的差异。 一、背景介绍 在 MySQL 数据库中&…

普元Devops学习笔记-devops构建后jenkins流水线sleep 1hr 23min的问题

1 背景 java项目命名为 simple2。 命名有点随意&#xff0c;不要在意这个&#xff0c;不重要。 simple2的代码维护在gitlab中。 simple2项目有两个git分支&#xff1a; dev 和 master 开发中的代码在 dev分支&#xff0c;dev分支需要合并(merge)到master主分支。 基于此目…

电机控制器遇上第三代半导体,杀手锏是什么?

导语 华东电机控制器市场的创新方向&#xff0c;文中参考答案都有了。 前言 随着工业自动化和智能化进程的加速推进&#xff0c;电机控制器作为驱动系统的核心部件&#xff0c;在推动产业升级转型中扮演着至关重要的角色。华东电机控制器市场以其独特的优势异军突起&#xff0c…

【C++ STL】unordered_mapunordered_set (哈希表)

文章目录 unordered_map&unordered_set1. unordered容器1.1 效率对比 2. 哈希2.1 哈希的定义哈希函数除留余数法自定义哈希函数 哈希冲突 2.2 哈希冲突的解决闭散列/开放定址法两种探测方式闭散列扩容 开散列/拉链法/哈希桶开散列实现 3. 模拟实现3.1 改造哈希表3.2 封装容…

GPIO输入模式之按键控制及光敏传感器控制应用案例

系列文章目录 STM32之GPIO&#xff08;General Purpose Input/Output&#xff0c;通用型输入输出&#xff09; GPIO输出控制之LED闪烁、LED流水灯以及蜂鸣器应用案例 文章目录 系列文章目录前言一、按键简介二、传感器模块简介2.1 AO模拟量输出模块2.2 DO数字量输出模块2.3 指…

【C语言加油站】数据在内存中的存储

数据在内存中的存储 导读一、计算机中的数据类型二、整数在计算机中的存储2.1 整数的存储形式——原码、反码与补码2.2 三种形式之间的相互转换2.3 采用补码存储整数的原因 三、大小端字节序与字节序判断3.1 大端存储与小端存储3.2 为什么会出现大小端存储&#xff1f;3.3 大端…

家用设备轻松搭建 AI 集群,畅跑 Llama 3.1 405B

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 本文主要介绍如何在家用设备上运行大型开源语言模型Llama 3.1 405B,首先我会解释构建人工智能集群来提高运行效率的原理,随后会演示如何通过Distributed Llama项目支持在多个设备上运行LLM模型,并…

【STL】05.vector的模拟实现

一、vector的实现 1.1 基本框架 template<class T> class vector {typedef T* iterator;typedef const T* const_iterator; public:private:iterator _startnullptr;iterator _finishnullptr;iterator _end_of_storagenullptr; };1.2 vector的默认成员函数 1.2.1 构造…

如何通过大模型生成业务需要的数据集

现在大模型训练数据的主力都是LLM自己贡献的了。但是也不是说你让它输出什么&#xff0c;然后它就一劳永逸地不停地输出你想要的东西。受限于LLM本身的能力、上下文规定的长度、训练方式导致的有限变化&#xff0c;你需要不断变更你的prompt&#xff0c;以让输出更多样。 接下…

录屏为什么没有声音?一款软件为您解决无声难题

录屏已经成为我们日常工作和生活中不可或缺的一部分。然而&#xff0c;有时在录屏过程中&#xff0c;我们可能会遇到一个令人困惑的问题&#xff1a;录屏为什么没有声音&#xff1f;本文将详细解析电脑录屏没有声音的可能原因&#xff0c;并提供相应的解决方案。同时&#xff0…

YOLOv10问世,登顶GiTHub!性能飞升,【多尺度目标检测】值得大看特看!

【多尺度目标检测】是近年来在深度学习领域中备受关注的一项技术&#xff0c;它通过处理图像中不同尺度的目标&#xff0c;显著提升了模型在复杂场景中的检测精度和鲁棒性。多尺度目标检测技术已经在自动驾驶、安防监控和遥感图像分析等多个领域取得了显著成果&#xff0c;其独…

SQL Server Management Studio的使用

之前在 https://blog.csdn.net/fengbingchun/article/details/140961550 介绍了在Windows10上安装SQL Server 2022 Express和SSMS&#xff0c;这里整理下SSMS的简单使用&#xff1a; SQL Server Management Studio(SSMS)是一种集成环境&#xff0c;提供用于配置、监视和管理SQL…

前端工程师学习springboot2.x之配置idea热更新实现高效率开发节奏

目前已经学习springboot实现了增删改查分页查询&#xff0c;每次修改业财或者是代码重启项目都让我觉得很闹心&#xff0c;现在给出idea2021版本自带热更新操作设置&#xff0c;设置过程分享给大家 总结&#xff1a;以上就是配置的全部过程&#xff0c;祝大家写代码快乐…

鸿蒙(Harmony) NEXT - AlphabetIndexer实现联系人字母索引

鸿蒙(Harmony) NEXT 9月份就要正式上架了&#xff0c;并且不会再兼容安卓平台&#xff0c;于是我也赶紧给App开发鸿蒙版本&#xff0c;接下来会写一系列的Harmony开发教程。 今天使用AlphabetIndexer实现联系人字母索引&#xff0c;AlphabetIndexer是官方封装好的组件 咱们实…

【驱动程序】3.5寸SPI液晶屏_ILI9488_stm32f103c8t6_CubeMX_HAL库

【驱动程序】3.5寸SPI液晶屏_ILI9488_stm32f103c8t6_CubeMX_HAL库 主控芯片&#xff1a; stm32f103c8t6 接线&#xff1a; LED-3.3v其他管脚按main.h文件接: #define LCD_CS_Pin GPIO_PIN_1 #define LCD_CS_GPIO_Port GPIOA #define LCD_RS_Pin GPIO_PIN_2…

武汉流星汇聚:全球化与多元化并进,亚马逊展望电商领域无限可能

在全球电商的浩瀚星空中&#xff0c;亚马逊无疑是最为耀眼的一颗星辰。凭借其多年在跨境市场的深耕细作&#xff0c;亚马逊不仅积累了庞大的高活跃用户群&#xff0c;还构建了显著的平台流量优势。根据Similar Web的权威数据&#xff0c;亚马逊的独立访问用户数量已超过26.59亿…

EGO-Swarm 仿真环境搭建

EGO-Swarm仿真环境搭建 参考教程&#xff1a; https://github.com/ZJU-FAST-Lab/ego-planner-swarm EGO-Swarm是一种分散的异步系统解决方案&#xff0c;用于仅使用机载资源在未知的障碍物丰富的场景中进行多机器人自主导航。 1. 查看系统环境 要运行本仿真程序&#xff0c…

评估测量仪器/传感器时的各种精度解析一览

在工业测量中&#xff0c;精度是一个复合概念&#xff0c;涉及到多个方面&#xff0c;通常用来描述测量结果的准确性和可靠性。 在选择测量仪器/传感器时&#xff0c;面对众多的精度名称&#xff0c;你是否苦恼他们具体描述的是什么精度&#xff0c;是否和评估要求有直接关联&…

开放式耳机有什么好处?开放式耳机该怎么选?

​开放式耳机的好处多多呀&#xff01;如今&#xff0c;开放式耳机已经迅速成为耳机市场上的新宠&#xff0c;它们以其独特的佩戴方式和卓越的音质表现&#xff0c;赢得了广大音乐爱好者和运动达人的喜爱。尤其是对于那些热爱听歌和追求运动自由的人们来说&#xff0c;开放式耳…