
>>>Windows平台如果播放不了视频,记得下载编解码工具:https://www.mediaplayercodecpack.com/#google_vignette media.player.codec.pack.v4.6.0.setup.exe

下载后双击安装。
>>>(.pro 文件)中引入 multimedia 和 multimediawidgets 模块的声明。通过添加这行代码,您可以在项目中使用 Qt 提供的多媒体相关功能,例如音频和视频播放、捕捉等。
TEMPLATE = appTARGET = videowidgetQT += multimedia multimediawidgetsHEADERS = \ videoplayer.hSOURCES = \ main.cpp \ videoplayer.cppQT+=widgets>>>QMediaPlayer 是 Qt Multimedia 模块中的一个类,用于处理多媒体内容的播放,如音频和视频。使用 QMediaPlayer,您可以轻松地加载多媒体文件、控制播放、暂停、停止以及获取播放状态等。
#ifndef VIDEOPLAYER_H // 防止重复包含头文件#define VIDEOPLAYER_H#include <QMediaPlayer> // 引入 QMediaPlayer 类,负责媒体播放#include <QWidget> // 引入 QWidget 类,作为所有用户界面对象的基类QT_BEGIN_NAMESPACE // 开始 Qt 命名空间class QAbstractButton; // 前向声明 QAbstractButton 类class QSlider; // 前向声明 QSlider 类class QLabel; // 前向声明 QLabel 类class QUrl; // 前向声明 QUrl 类QT_END_NAMESPACE // 结束 Qt 命名空间// 定义 VideoPlayer 类,继承自 QWidgetclass VideoPlayer : public QWidget{ Q_OBJECT // 必须在定义 QObject 类和其子类时使用,支持信号和槽机制public: VideoPlayer(QWidget *parent = nullptr); // 构造函数,接受一个父级 QWidget 指针 ~VideoPlayer(); // 析构函数 void setUrl(const QUrl &url); // 设置视频播放的 URLpublic slots: // 公有槽函数,供其他对象调用 void openFile(); // 打开文件 void play(); // 播放视频private slots: // 私有槽函数,仅用于内部使用 void mediaStateChanged(QMediaPlayer::State state); // 媒体状态变化处理 void positionChanged(qint64 position); // 媒体播放位置变化处理 void durationChanged(qint64 duration); // 媒体时长变化处理 void setPosition(int position); // 设置播放位置 void handleError(); // 处理错误private: QMediaPlayer* m_mediaPlayer; // 媒体播放器对象指针 QAbstractButton *m_playButton; // 播放按钮对象指针 QSlider *m_positionSlider; // 播放进度滑块对象指针 QLabel *m_errorLabel; // 错误信息标签对象指针};#endif // 结束防止重复包含头文件>>>QCommandLineParser 是 Qt 框架中的一个类,用于解析命令行参数。它提供了一种简便的方式来处理命令行输入,使得程序可以根据用户提供的参数来执行不同的功能。 QCommandLineOption 是 Qt 框架中的一个类,用于表示命令行参数的选项。它是 QCommandLineParser 的配合使用的一部分,允许开发者定义可用的命令行选项。
#include "videoplayer.h" // 引入视频播放器头文件#include <QtWidgets/QApplication> // 引入 QApplication 类#include <QtWidgets/QDesktopWidget> // 引入 QDesktopWidget 类,用于获取桌面信息#include <QtCore/QCommandLineParser> // 引入 QCommandLineParser 类,用于解析命令行参数#include <QtCore/QCommandLineOption> // 引入 QCommandLineOption 类,表示命令行选项#include <QtCore/QDir> // 引入 QDir 类,用于目录操作#include <QDebug>// 主函数,程序的入口int main(int argc, char *argv[]){ QApplication app(argc, argv); // 创建 QApplication 对象,管理图形用户界面应用程序的控制流和主要设置 QCoreApplication::setApplicationName("Qt历险记 视屏播放器"); // 设置应用程序名称 QCoreApplication::setOrganizationName("QtProject"); // 设置组织名称 QGuiApplication::setApplicationDisplayName(QCoreApplication::applicationName()); // 设置应用程序显示名称 QCoreApplication::setApplicationVersion(QT_VERSION_STR); // 设置应用程序版本 QCommandLineParser parser; // 创建命令行解析器 parser.setApplicationDescription("Qt Video Widget Example"); // 设置应用程序描述 parser.addHelpOption(); // 添加帮助选项 parser.addVersionOption(); // 添加版本选项 parser.addPositionalArgument("url", QDir::toNativeSeparators("C:\\Users\sujieyin.BAIN\\Videos\\video(25).mp4")); // 添加位置参数,表示要打开的 URL parser.process(app); // 处理命令行参数 qDebug() << "parser.positionalArguments().constFirst() = " << parser.positionalArguments() << endl; VideoPlayer player; // 创建 VideoPlayer 对象 if (!parser.positionalArguments().isEmpty()) { // 如果有位置参数 const QUrl url = QUrl::fromUserInput(parser.positionalArguments().constFirst(), QDir::currentPath(), QUrl::AssumeLocalFile); // 获取 URL player.setUrl(url); // 设置视频播放器的 URL } const QRect availableGeometry = QApplication::desktop()->availableGeometry(&player); // 获取屏幕上可用的几何矩形 player.resize(availableGeometry.width() / 6, availableGeometry.height() / 4); // 设置播放器大小 player.show(); // 显示播放器 return app.exec(); // 进入应用程序的主事件循环}>>>QVideoWidget 是 Qt 框架中用于显示视频的组件。它可以与 QMediaPlayer 类一起使用,以便播放视频内容。 QUrl 是 Qt 框架中的一个类,用于处理和操作统一资源定位符(URI)。它提供了一种简单的方法来表示和解析 URL,包括处理 URL 的各个组成部分,例如协议、主机、路径和查询参数等。
#include "videoplayer.h" // 引入自定义的视频播放器头文件#include <QtWidgets> // 引入Qt Widgets模块#include <QVideoWidget> // 引入QVideoWidget类,用于视频显示// VideoPlayer构造函数,初始化界面和播放器VideoPlayer::VideoPlayer(QWidget *parent) : QWidget(parent) // 调用基类构造函数{ // 创建媒体播放器对象,并指定视频输出为 QVideoSurface m_mediaPlayer = new QMediaPlayer(this, QMediaPlayer::VideoSurface); QVideoWidget *videoWidget = new QVideoWidget; // 创建视频显示窗口 // 创建“打开”按钮 QAbstractButton *openButton = new QPushButton(tr("Open...")); // 连接按钮点击信号到打开文件槽 connect(openButton, &QAbstractButton::clicked, this, &VideoPlayer::openFile); // 创建播放按钮 m_playButton = new QPushButton; m_playButton->setEnabled(false); // 初始禁用按钮 m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay)); // 设置图标为播放 // 连接播放按钮点击信号到播放槽 connect(m_playButton, &QAbstractButton::clicked, this, &VideoPlayer::play); // 创建进度滑块 m_positionSlider = new QSlider(Qt::Horizontal); m_positionSlider->setRange(0, 0); // 设置初始范围 // 连接滑块移动信号到设置位置槽 connect(m_positionSlider, &QAbstractSlider::sliderMoved, this, &VideoPlayer::setPosition); // 创建错误信息标签 m_errorLabel = new QLabel; m_errorLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); // 设置尺寸策略 // 创建控制布局,水平布局 QBoxLayout *controlLayout = new QHBoxLayout; controlLayout->setContentsMargins(0, 0, 0, 0); // 设置内容边距为零 controlLayout->addWidget(openButton); // 添加打开按钮 controlLayout->addWidget(m_playButton); // 添加播放按钮 controlLayout->addWidget(m_positionSlider); // 添加进度滑块 // 创建主布局,垂直布局 QBoxLayout *layout = new QVBoxLayout; layout->addWidget(videoWidget); // 添加视频窗口 layout->addLayout(controlLayout); // 添加控制组件布局 layout->addWidget(m_errorLabel); // 添加错误标签 setLayout(layout); // 设置主布局 // 设置媒体播放器的视频输出为videoWidget m_mediaPlayer->setVideoOutput(videoWidget); // 连接媒体播放器的各种状态和位置变化信号到相应的槽函数 connect(m_mediaPlayer, &QMediaPlayer::stateChanged, this, &VideoPlayer::mediaStateChanged); connect(m_mediaPlayer, &QMediaPlayer::positionChanged, this, &VideoPlayer::positionChanged); connect(m_mediaPlayer, &QMediaPlayer::durationChanged, this, &VideoPlayer::durationChanged); connect(m_mediaPlayer, QOverload<QMediaPlayer::Error>::of(&QMediaPlayer::error), this, &VideoPlayer::handleError); // 错误处理}// VideoPlayer析构函数VideoPlayer::~VideoPlayer(){}// 打开文件的槽函数void VideoPlayer::openFile(){ QFileDialog fileDialog(this); // 创建文件对话框 fileDialog.setAcceptMode(QFileDialog::AcceptOpen); // 设置为打开模式 fileDialog.setWindowTitle(tr("Open Movie")); // 设置窗口标题 QStringList supportedMimeTypes = m_mediaPlayer->supportedMimeTypes(); // 获取支持的MIME类型 if (!supportedMimeTypes.isEmpty()) fileDialog.setMimeTypeFilters(supportedMimeTypes); // 设置MIME类型过滤 // 设置默认打开目录为视频目录或用户主目录 fileDialog.setDirectory(QStandardPaths::standardLocations(QStandardPaths::MoviesLocation).value(0, QDir::homePath())); if (fileDialog.exec() == QDialog::Accepted) // 如果用户选择了文件 setUrl(fileDialog.selectedUrls().constFirst()); // 设置URL}// 设置视频URL的函数// Windows平台如果播放不了视频,记得下载编解码工具:https://www.mediaplayercodecpack.com/#google_vignette// media.player.codec.pack.v4.6.0.setup.exevoid VideoPlayer::setUrl(const QUrl &url){ m_errorLabel->setText(QString()); // 清除错误信息 setWindowFilePath(url.isLocalFile() ? url.toLocalFile() : QString()); // 设置窗口文件路径 m_mediaPlayer->setMedia(url); // 设置媒体源 m_playButton->setEnabled(true); // 启用播放按钮}// 播放或暂停视频的槽函数void VideoPlayer::play(){ switch (m_mediaPlayer->state()) { case QMediaPlayer::PlayingState: // 如果当前是播放状态 m_mediaPlayer->pause(); // 则暂停 break; default: // 否则播放 m_mediaPlayer->play(); break; }}// 媒体状态变化处理的槽函数void VideoPlayer::mediaStateChanged(QMediaPlayer::State state){ switch(state) { case QMediaPlayer::PlayingState: // 如果媒体正在播放 m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause)); // 更改按钮图标为暂停 break; default: // 其他状态 m_playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay)); // 更改按钮图标为播放 break; }}// 播放位置变化的槽函数void VideoPlayer::positionChanged(qint64 position){ m_positionSlider->setValue(position); // 更新滑块位置}// 媒体时长变化的槽函数void VideoPlayer::durationChanged(qint64 duration){ m_positionSlider->setRange(0, duration); // 更新滑块范围}// 设置媒体播放位置的槽函数void VideoPlayer::setPosition(int position){ m_mediaPlayer->setPosition(position); // 设置媒体当前播放位置}// 错误处理的槽函数void VideoPlayer::handleError(){ m_playButton->setEnabled(false); // 禁用播放按钮 const QString errorString = m_mediaPlayer->errorString(); // 获取错误信息 QString message = "Error: "; if (errorString.isEmpty()) // 如果错误信息为空 message += " #" + QString::number(int(m_mediaPlayer->error())); // 显示错误代码 else message += errorString; // 显示错误信息 m_errorLabel->setText(message); // 更新错误标签显示}>>>安装编解码工具后,双击安装。

点击ctrl+r 运行 目前我测试了gif和MP4,其他文件应该也可以,留给大家完成。
基于Qt MP3音频播放器示例(可制作音频播放器) |
|---|
基于Qt 音乐播放器mp3(进阶) |
Qt | 视频播放器(multimedia、multimediawidgets) |
AI+Qt6.5.3+ubuntu20.04+FFmpeg音视频编解码(播放一个中秋节快乐视频为例) |
实现音视频编解码(播放一个中秋节快乐视频为例)Qt | AI+Qt6.5.3+ubuntu20.04+FFmpeg |
>>>年底了家人们,赚到钱没有??? 千万别学我,一贫如洗。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。