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 支持,必要时安装相应的编解码器。

相关推荐
进击的荆棘1 小时前
优选算法——BFS
c++·算法·leetcode·宽度优先
.千余3 小时前
【C++】C++ set 与 multiset 完全指南:关联式容器入门
开发语言·c++·笔记·学习·其他
c++之路6 小时前
CMake 系列教程(二):基础命令详解
开发语言·c++
南境十里·墨染春水10 小时前
C++ 工厂模式:从入门到进阶,彻底掌握对象创建的艺术
开发语言·c++·算法
小白舒_SC10 小时前
多个VS版本的Qt VS Tools的QtMsBuild不兼容问题
经验分享·qt
一拳一个呆瓜13 小时前
【STL】_SCL_SECURE_NO_WARNINGS
c++·stl
小小编程路13 小时前
C++ 异常 完整讲解
开发语言·c++
Frank学习路上16 小时前
【C++】面试:关键字与语法特性
c++·面试
金色熊族16 小时前
QTransform使用心得(二)--仿射变换、非仿射变换、矩阵
qt·线性代数·矩阵