广告位联系
返回顶部
分享到

Qt音视频功能实现方法

C语言 来源:互联网 作者:佚名 发布时间:2024-09-07 23:08:29 人浏览
摘要

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

Qt 音视频

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

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

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

1. Qt 音频

核心 API :

1

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

示例代码:

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

2、界面如下:

3、引入声音文件:

4、widget.cpp 文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#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 类来实现。在使用这两个类时要添加对应的模块 multimedia 和 multimediawidgets.

核心 API:

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

示例代码:

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

2、widget.h 程序如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

#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 程序如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

#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();

}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 解读构造函数的调用规则、深拷贝与浅拷贝

    解读构造函数的调用规则、深拷贝与浅拷贝
    1.调用规则 默认情况下,C++至少会给一个类添加三个函数: 默认构造函数(无参,函数体为空) 默认析构函数(无参,函数体为空) 默认
  • Qt音视频功能实现方法

    Qt音视频功能实现方法
    Qt 音视频 在 Qt 中,音频主要是通过QSound类来实现。但是需要注意的是QSound类只支持播放wav格式的音频文件。也就是说如果想要添加音频效果
  • C++的dynamic代码介绍
    在C++编程中,dynamic_cast是处理多态类型转换的关键工具,允许在复杂继承结构中安全地将基类指针或引用转换为派生类指针或引用。通过利
  • C++中使用不同平台的时间函数及对比介绍
    在 C++ 编程中,时间函数的选择对于性能测量、任务调度和时间戳记录至关重要。不同的操作系统提供了不同的时间函数,同时在同一个平台
  • C++中VTK9.3.0刻度标签重叠的问题记录

    C++中VTK9.3.0刻度标签重叠的问题记录
    本文采用VTK9.3.0版本,其他版本如VKT8.0亦有同样的问题 VTK显示文本时,Z轴刻度标签出现了重叠,如下图: 寻找好久,没有找到设置标签间距
  • C++拷贝构造函数和赋值运算符重载介绍

    C++拷贝构造函数和赋值运算符重载介绍
    一,拷贝构造函数 1. 什么是拷贝构造函数 拷贝构造函数是特殊的构造函数。是用一个已经存在的对象,赋值拷贝给另一个新创建的已经存在
  • C++中生成随机数的方法介绍

    C++中生成随机数的方法介绍
    背景 C++ 11 在头文件 #include 中定义了随机数库,也可以使用 C 中生成随机数的方法。 C 生成随机数 概述 C 语言中使用 rand() 函数产生 0 ~ RA
  • c++项目中后缀名vcxproj和sln的区别及说明
    c++项目后缀名vcxproj和sln区别 `.vcxproj 文件 是 Visual Studio 中用于存储 C++ 项目配置和设置的 XML 文件。 它包含了项目的编译选项、链接选项、
  • C++项目实战之makefile使用

    C++项目实战之makefile使用
    makefile简介 一个工程中的源文件不计其数(一个项目有有很多的文件),现在的项目基本都是按模块进行划分的,而这些模块存放在若干目录中
  • c++的构造函数使用方式介绍
    1.什么是构造函数? C++中的构造函数是一种特殊的成员函数,用于在创建对象时进行初始化操作。 构造函数的名称与类名相同,没有返回类
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计