68、项目配置和示例---------多媒体

项目配置和示例

项目配置

在项目的 .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 代码说明

  1. 创建主窗口和布局 :使用 QWidgetQVBoxLayout 创建简易的用户界面。
  2. 创建播放控制按钮:包含"播放"、"暂停"、"停止"和"打开文件"四个按钮。
  3. 创建 QMediaPlayer实例:用于音频播放控制。
  4. 连接信号与槽:
    • openButton 用于选择音频文件并设置为播放源。
    • playButton 连接到 QMediaPlayer::play 方法,开始播放。
    • pauseButton 连接到 QMediaPlayer::pause 方法,暂停播放。
    • stopButton 连接到 QMediaPlayer::stop 方法,停止播放。
  1. 运行应用程序:启动应用程序的主事件循环。

3 运行效果

运行程序后,点击"打开文件"按钮选择一个音频文件,然后点击"播放"按钮开始播放音频。可以通过"暂停"和"停止"按钮控制播放状态。

基础视频播放示例

以下示例展示如何使用 QMediaPlayerQVideoWidget 类播放一个视频文件。

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 代码说明

  1. 创建视频显示控件 :使用 QVideoWidget 作为视频内容的显示区域。
  2. 创建播放控制按钮:包含"播放"、"暂停"、"停止"和"打开文件"四个按钮。
  3. 创建 QMediaPlayer实例 :用于视频播放控制,并将视频输出设置为 QVideoWidget
  4. 连接信号与槽:
    • openButton 用于选择视频文件并设置为播放源。
    • playButton 连接到 QMediaPlayer::play 方法,开始播放视频。
    • pauseButton 连接到 QMediaPlayer::pause 方法,暂停播放视频。
    • stopButton 连接到 QMediaPlayer::stop 方法,停止播放视频。
  1. 运行应用程序:启动应用程序的主事件循环。

3 运行效果

运行程序后,点击"打开文件"按钮选择一个视频文件,然后点击"播放"按钮开始播放视频。可以通过"暂停"和"停止"按钮控制播放状态。

注意:确保所选视频文件的编码格式被 Qt 支持,必要时安装相应的编解码器。

相关推荐
没文化的阿浩5 小时前
【C++】详解继承机制
开发语言·c++
拳里剑气5 小时前
C++算法:队列与BFS
c++·算法·bfs·宽度优先·队列
aaPIXa6225 小时前
C++模板元编程:在编译期完成计算,实现零运行时开销
java·开发语言·c++
郝学胜-神的一滴6 小时前
CMake 038:OBJECT目标复用编译+Linux动态库版本自动化管理
linux·c++·程序人生·软件工程·软件构建·cmake·工程配置
初阳7856 小时前
【Qt】系统相关(3)——多线程
qt
Sylvia-girl6 小时前
第八站:vector及其常用操作【上】
c++
Sunsets_Red7 小时前
浅谈博弈论
c++·学习·编程·博弈论·信息学竞赛·巴巴博弈
ALex_zry7 小时前
C++26 std::inplace_vector 详解:零堆分配的定容向量
开发语言·c++
我不是懒洋洋7 小时前
从零实现一个安全沙箱:文件行为分析系统
c++
卷无止境7 小时前
C++ 类型转换变迁之路:从隐式转换到 static_cast
c++·后端