【QT】Qt 音视频

Qt 音视频

  • [Qt 音视频](#Qt 音视频)
    • [1. Qt 音频](#1. Qt 音频)
    • [2. 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();
			}
相关推荐
清风明月一壶酒8 分钟前
OpenClaw自动处理Word文档全流程
开发语言·c#·word
其实防守也摸鱼13 分钟前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学
木喃的井盖16 分钟前
无锁队列细节
c++·工程
王老师青少年编程34 分钟前
csp信奥赛C++高频考点专项训练之字符串 --【字符串基础】:输出亲朋字符串
c++·字符串·csp·高频考点·信奥赛·专项训练·输出亲朋字符串
Navigator_Z1 小时前
LeetCode //C - 1033. Moving Stones Until Consecutive
c语言·算法·leetcode
WBluuue1 小时前
数据结构与算法:莫队(一):普通莫队与带修莫队
c++·算法
小郑加油1 小时前
python学习Day12:pandas安装与实际运用
开发语言·python·学习
AC赳赳老秦1 小时前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
KuaCpp2 小时前
C++面向对象(速过复习版)
开发语言·c++
wbs_scy2 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言