项目配置和示例
项目配置
在项目的 .pro 文件中添加必要的模块支持。
示例 .pro 文件
cpp
QT += core gui multimedia multimediawidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MediaPlayerDemo
TEMPLATE = app
SOURCES += main.cpp
确保 Qt 的多媒体模块正确安装,并且能够支持所需的音视频格式。某些平台可能需要安装额外的编解码器。
基础音频播放示例
以下示例展示如何使用 QMediaPlayer 类播放一个音频文件。

1 示例代码
cpp
// main.cpp
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QMediaPlayer>
#include <QFileDialog>
#include <QHBoxLayout>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建主窗口
QWidget window;
window.setWindowTitle("Qt 音频播放示例");
window.resize(300, 150);
// 创建布局
QVBoxLayout *mainLayout = new QVBoxLayout(&window);
// 创建播放控制按钮
QPushButton *playButton = new QPushButton("播放");
QPushButton *pauseButton = new QPushButton("暂停");
QPushButton *stopButton = new QPushButton("停止");
QPushButton *openButton = new QPushButton("打开文件");
QHBoxLayout *controlLayout = new QHBoxLayout;
controlLayout->addWidget(playButton);
controlLayout->addWidget(pauseButton);
controlLayout->addWidget(stopButton);
controlLayout->addWidget(openButton);
mainLayout->addLayout(controlLayout);
// 创建QMediaPlayer实例
QMediaPlayer *player = new QMediaPlayer(&window);
// 连接打开文件按钮
QObject::connect(openButton, &QPushButton::clicked, [&](){
QString fileName = QFileDialog::getOpenFileName(&window, "选择音频文件", "", "音频文件 (*.mp3 *.wav *.ogg)");
if (!fileName.isEmpty()) {
player->setMedia(QUrl::fromLocalFile(fileName));
}
});
// 连接播放按钮
QObject::connect(playButton, &QPushButton::clicked, player, &QMediaPlayer::play);
// 连接暂停按钮
QObject::connect(pauseButton, &QPushButton::clicked, player, &QMediaPlayer::pause);
// 连接停止按钮
QObject::connect(stopButton, &QPushButton::clicked, player, &QMediaPlayer::stop);
// 显示窗口
window.show();
return app.exec();
}
2 代码说明
- 创建主窗口和布局 :使用
QWidget和QVBoxLayout创建简易的用户界面。 - 创建播放控制按钮:包含"播放"、"暂停"、"停止"和"打开文件"四个按钮。
- 创建
QMediaPlayer实例:用于音频播放控制。 - 连接信号与槽:
-
openButton用于选择音频文件并设置为播放源。playButton连接到QMediaPlayer::play方法,开始播放。pauseButton连接到QMediaPlayer::pause方法,暂停播放。stopButton连接到QMediaPlayer::stop方法,停止播放。
- 运行应用程序:启动应用程序的主事件循环。
3 运行效果
运行程序后,点击"打开文件"按钮选择一个音频文件,然后点击"播放"按钮开始播放音频。可以通过"暂停"和"停止"按钮控制播放状态。

基础视频播放示例
以下示例展示如何使用 QMediaPlayer 和 QVideoWidget 类播放一个视频文件。

1 示例代码
cpp
// main.cpp
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QMediaPlayer>
#include <QVideoWidget>
#include <QFileDialog>
#include <QHBoxLayout>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建主窗口
QWidget window;
window.setWindowTitle("Qt 视频播放示例");
window.resize(800, 600);
// 创建布局
QVBoxLayout *mainLayout = new QVBoxLayout(&window);
// 创建视频显示控件
QVideoWidget *videoWidget = new QVideoWidget;
mainLayout->addWidget(videoWidget);
// 创建播放控制按钮
QPushButton *playButton = new QPushButton("播放");
QPushButton *pauseButton = new QPushButton("暂停");
QPushButton *stopButton = new QPushButton("停止");
QPushButton *openButton = new QPushButton("打开文件");
QHBoxLayout *controlLayout = new QHBoxLayout;
controlLayout->addWidget(playButton);
controlLayout->addWidget(pauseButton);
controlLayout->addWidget(stopButton);
controlLayout->addWidget(openButton);
mainLayout->addLayout(controlLayout);
// 创建QMediaPlayer实例
QMediaPlayer *player = new QMediaPlayer(&window);
player->setVideoOutput(videoWidget);
// 连接打开文件按钮
QObject::connect(openButton, &QPushButton::clicked, [&](){
QString fileName = QFileDialog::getOpenFileName(&window, "选择视频文件", "",
"视频文件 (*.mp4 *.avi *.mkv *.mov)");
if (!fileName.isEmpty()) {
player->setMedia(QUrl::fromLocalFile(fileName));
player->play(); // 自动开始播放
}
});
// 连接错误信息
QObject::connect(player, QOverload<QMediaPlayer::Error>::of(&QMediaPlayer::error),
[&](QMediaPlayer::Error error){
qDebug() << "播放错误:" << player->errorString();
});
// 连接播放按钮
QObject::connect(playButton, &QPushButton::clicked, player, &QMediaPlayer::play);
// 连接暂停按钮
QObject::connect(pauseButton, &QPushButton::clicked, player, &QMediaPlayer::pause);
// 连接停止按钮
QObject::connect(stopButton, &QPushButton::clicked, player, &QMediaPlayer::stop);
// 显示窗口
window.show();
return app.exec();
}
上述代码运行报错

原因:QT使用windows默认解码器,如果没有安装有相关DirectShowService解码器,则运行程序也是没法播放视频的,必须安装相关directshow解码器,安装位置在你的qt安装目录。
LAVFilter解码器下载地址
Releases · Nevcairiel/LAVFilters · GitHub
下载installer.exe安装
安装目录选择Qt目录

接着按照默认配置无脑安装即可。
安装完成后重启下电脑
2 代码说明
- 创建视频显示控件 :使用
QVideoWidget作为视频内容的显示区域。 - 创建播放控制按钮:包含"播放"、"暂停"、"停止"和"打开文件"四个按钮。
- 创建
QMediaPlayer实例 :用于视频播放控制,并将视频输出设置为QVideoWidget。 - 连接信号与槽:
-
openButton用于选择视频文件并设置为播放源。playButton连接到QMediaPlayer::play方法,开始播放视频。pauseButton连接到QMediaPlayer::pause方法,暂停播放视频。stopButton连接到QMediaPlayer::stop方法,停止播放视频。
- 运行应用程序:启动应用程序的主事件循环。
3 运行效果

运行程序后,点击"打开文件"按钮选择一个视频文件,然后点击"播放"按钮开始播放视频。可以通过"暂停"和"停止"按钮控制播放状态。
注意:确保所选视频文件的编码格式被 Qt 支持,必要时安装相应的编解码器。