388 字
1 分钟
【QT】多媒体
2026-06-11

Qt6 多媒体在 6.2 起正式发布。与 Qt5 相比架构变化较大:放弃基于插件的多后端结构,改为统一后端(对用户隐藏)。

模块引入#

qmake

QT += multimedia multimediawidgets

CMake

find_package(Qt6 REQUIRED COMPONENTS Multimedia MultimediaWidgets)
target_link_libraries(MyApp Qt6::Multimedia Qt6::MultimediaWidgets)
#include <QtMultimedia>
#include <QtMultimediaWidgets>

子模块#

模块内容
Qt Multimedia播放、采集、设备、格式等核心类
Qt Multimedia WidgetsQVideoWidget 等界面组件

主要类#

类名功能
QMediaPlayer播放音频或视频(本地/网络)
QVideoWidget显示视频画面
QMediaCaptureSession统一管理采集管线(Qt6)
QCamera摄像头
QAudioInput / QAudioOutput音频输入 / 输出设备
QAudioSource / QAudioSink原始 PCM 采集 / 播放
QImageCapture静态拍照
QMediaRecorder录制音视频
QMediaDevices枚举系统音视频设备
QMediaFormat编码与容器格式
QVideoSink访问/处理视频帧

基于 QMediaPlayer 的音频播放(Qt6)#

典型步骤:

  1. 创建 QMediaPlayer
  2. setAudioOutput() 绑定 QAudioOutput
  3. setSource() 设置 URL 或本地路径
  4. play() / pause() / stop() 控制
QMediaPlayer *player = new QMediaPlayer(this);
QAudioOutput *audioOutput = new QAudioOutput(this);
player->setAudioOutput(audioOutput);
player->setSource(QUrl::fromLocalFile("/path/to/music.mp3"));
connect(ui->btnPlay, &QPushButton::clicked, player, &QMediaPlayer::play);
connect(ui->btnPause, &QPushButton::clicked, player, &QMediaPlayer::pause);
connect(ui->sliderVolume, &QSlider::valueChanged, audioOutput, [audioOutput](int v) {
audioOutput->setVolume(v / 100.0);
});
player->play();

常用信号:positionChangeddurationChangedplaybackStateChangederrorOccurred

视频播放#

QMediaPlayer *player = new QMediaPlayer(this);
QAudioOutput *audioOutput = new QAudioOutput(this);
QVideoWidget *videoWidget = new QVideoWidget(this);
player->setAudioOutput(audioOutput);
player->setVideoOutput(videoWidget);
player->setSource(QUrl("file:///path/to/video.mp4"));
videoWidget->show();
player->play();

网络视频使用 QUrl("https://...");需平台解码器与格式支持。

摄像头预览(Qt6 概念)#

QMediaCaptureSession *session = new QMediaCaptureSession(this);
QCamera *camera = new QCamera(QMediaDevices::defaultVideoInput(), this);
QVideoWidget *viewfinder = new QVideoWidget(this);
session->setCamera(camera);
session->setVideoOutput(viewfinder);
camera->start();
viewfinder->show();

拍照、录像分别通过 QImageCaptureQMediaRecorder 挂到同一 QMediaCaptureSession

Qt5 与 Qt6 差异(查阅旧代码时注意)#

Qt5Qt6
QMediaPlayer + QMediaPlaylist播放列表需自行管理或第三方
setMedia(QUrl)setSource(QUrl)
视频输出 setVideoOutput(QVideoWidget*)类似,但常与 QMediaCaptureSession 配合采集
模块结构多插件单一后端

部署注意#

  • Linux 需 GStreamer 等依赖(视发行版与 Qt 构建选项而定)。
  • Windows 常用系统 Media Foundation 或 FFmpeg 后端。
  • 嵌入式需确认目标板编解码器与 Qt Multimedia 插件是否可用。
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

【QT】多媒体
https://lysj.work/posts/studynotes/qt/qt多媒体/
作者
Sekiro
发布于
2026-06-11
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录