当前位置: 首页 > news >正文

Qt 系统相关 - 音视频

Qt 音频

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

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

核心 API 概览

API功能描述
play()开始或继续播放当前源。

示例

/******************************* SoundTest.pro *******************************/
QT       += core gui multimedia  // 添加音频模块/******************************* widget.cpp *******************************/
#include "widget.h"
#include "ui_widget.h"
#include <QSound>  // 添加音频头文件Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 实例化对象QSound *sound = new QSound(":/1.wav",this);connect(ui->btn,&QPushButton::clicked,[=](){sound->play(); // 播放});
}Widget::~Widget()
{delete ui;
}

Qt 视频

在 Qt 中,视频播放功能主要通过 QMediaPlayer 类和 VideoWidget 类实现。使用这两个类时,要添加对应模块 multimedia 和 multimediawidgets

核心 API 概览

API功能描述
setMedia()设置当前媒体源。
setVideoOutput()将 QVideoWidget 视频输出附加到媒体播放器。若媒体播放器已附加视频输出,将更换一个新的。

示例

首先在 .pro 文件中添加 multimedia 和 multimediawidgets 两个模块,如下:

/******************************* widget.h *******************************/
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QHBoxLayout>  // 水平布局
#include <QVBoxLayout>  // 垂直布局
#include <QVideoWidget> // 显示视频
#include <QMediaPlayer> // 播放声音
#include <QPushButton>  // 按钮
#include <QStyle>       // 设置图标
#include <QFileDialog>  // 选择文件/文件夹class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();public slots:void chooseVideo();private:QMediaPlayer *mediaPlayer;QVideoWidget *videoWidget;QVBoxLayout *vbox;// 创建两个按钮:选择视频按钮和开始播放按钮QPushButton chooseBtn,playBtn;
};#endif // WIDGET_H/******************************* widget.cpp *******************************/
#include "widget.h"
#include "ui_widget.h"
#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();
}Widget::~Widget()
{
}
http://www.dtcms.com/a/395469.html

相关文章:

  • Go基础:Go语言中的指针详解:在什么情况下应该使用指针?
  • ReactNative性能优化实践方案
  • 大数据数仓面试问题
  • 深入理解Java中的==、equals与hashCode:区别、联系
  • Qt笔记:QString::toLocal8Bit的理解
  • 第12章 机器学习 - 局限性
  • ​​[硬件电路-320]:模拟电路与数字电路,两者均使用晶体管(如BJT、MOSFET),但模拟电路利用其线性区,数字电路利用其开关特性。
  • 今日行情明日机会——20250922
  • 智能交通拥堵检测系统详解(附视频+代码资源)
  • LLM 数据安全:筑牢数据防线
  • AI 在医疗领域的十大应用:从疾病预测到手术机器人
  • 零序电流/电压(面向储能变流器应用)
  • 【系统分析师】2024年上半年真题:综合知识-答案及详解(回忆版)
  • 给工业通信装“耐达讯自动化翻译器”:电表说Modbus,主控听Profibus,全靠它传话
  • 不同品牌PLC如何接入云平台?御控多协议物联网网关一站式集成方案
  • 深入理解指针(最终章):指针运算本质与典型试题剖析
  • SCI 期刊验证!苏黎世大学使用 ALINX FPGA 开发板实现分子动力学模拟新方案
  • C# OnnxRuntime yolov8 纸箱分割
  • SQLite3的API调用实战例子
  • LeetCode 60. 排列序列
  • springboot2.7.11 + quartz2.3.2,单机,集群实战,增删改查任务,项目一启动就执行任务
  • Hive 调优
  • 王晨辉:RWA注册登记平台赋能资产数字化转型
  • 周末荐读:美 SEC 推出加密货币 ETF 上市标准,Base 发币在即
  • HTTP API获取 MQTT上报数据
  • Apache HTTP基于端口的多站点部署完整教程
  • 新网站如何让百度快速收录的方法大全
  • 企业非结构化数据治理与存储架构优化实践探索
  • dagger.js 实现嵌套路由导航:对比 React Router 的另一种思路
  • React自定义同步状态Hook