Qt音视频功能实现方法详解

 更新时间:2024年09月06日 08:52:28   作者:YoungMLet  
音视频应用往往需要大量的计算资源,尤其是在处理高分辨率、高码率的音视频数据时,这篇文章主要给大家介绍了关于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 类来实现。在使用这两个类时要添加对应的模块 multimedia 和 multimediawidgets.

核心 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();
			}

总结 

到此这篇关于Qt音视频功能实现的文章就介绍到这了,更多相关Qt音视频内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言实现BMP图像的读写功能

    C语言实现BMP图像的读写功能

    这篇文章主要介绍了C语言实现BMP图像的读写功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • C语言中位域的使用详解

    C语言中位域的使用详解

    位域是C语言中的一种高级功能,允许程序员为结构体的成员分配特定数量的位,本文主要为大家介绍了位域的使用以及优缺点,希望对大家有所帮助
    2023-07-07
  • C++智能指针之shared_ptr详解

    C++智能指针之shared_ptr详解

    这篇文章主要为大家详细介绍了C++智能指针之shared_ptr,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C语言用函数实现反弹球消砖块

    C语言用函数实现反弹球消砖块

    这篇文章主要为大家详细介绍了C语言用函数实现反弹球消砖块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C语言高效编程的几招小技巧

    C语言高效编程的几招小技巧

    这篇文章主要介绍了C语言高效编程的几招小技巧,本文讲解了以空间换时间、用数学方法解决问题以及使用位操作等编辑技巧,并给出若干方法和代码实例,需要的朋友可以参考下
    2015-05-05
  • C++中关键字const的详细说明和使用介绍(最全)

    C++中关键字const的详细说明和使用介绍(最全)

    const在C/C++中是十分重要的,如果单纯理解为“常量”那么你的格局就小了,今天在这里给大家介绍一下const在C++中具体详细的用法,需要的朋友可以参考下
    2025-03-03
  • C++从汇编的视角审视对象的创建问题

    C++从汇编的视角审视对象的创建问题

    这篇文章主要介绍了C++从汇编的视角看对象的创建,从汇编的视角来看,调用构造器和调用 “返回对象” 的函数是一样的,从汇编的角度来看,对象就是一堆数据的排列,比如说最普通的对象就是数据成员按照声明顺序直接排列,需要的朋友可以参考下
    2022-01-01
  • c语言如何输出一个n行m列的图形

    c语言如何输出一个n行m列的图形

    这篇文章主要介绍了c语言如何输出一个n行m列的图形问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • OpenCV实现马赛克功能

    OpenCV实现马赛克功能

    这篇文章主要为大家详细介绍了OpenCV实现马赛克功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C语言中fgetgrent()函数和fgetpwent()函数的用法对比

    C语言中fgetgrent()函数和fgetpwent()函数的用法对比

    这篇文章主要介绍了C语言中fgetgrent()函数和fgetpwent()函数的用法对比,分别用于读取组格式函数和读取密码格式,需要的朋友可以参考下
    2015-08-08

最新评论