C语言
主页 > 软件编程 > C语言 >

Qt音视频功能实现方法

2024-09-07 | 佚名 | 点击:

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

}

原文链接:
相关文章
最新更新