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_OBJECT

public:
    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()
{
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值