
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()
{
}
2145

被折叠的 条评论
为什么被折叠?



