Qt实用技巧:使用QMediaPlayer和Windows自带组件播放swf、rmvb、mpg、mp4等视频文件

简介: Qt实用技巧:使用QMediaPlayer和Windows自带组件播放swf、rmvb、mpg、mp4等视频文件

若该文为原创文章,未经允许不得转载

原博主博客地址:https://blog.csdn.net/qq21497936

原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78651732

各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

目录

需求

原理

相关博客

Demo

效果图

关键操作

源代码


Qt开发专栏:实用技巧(点击传送门)

 

   Qt实用技巧:使用QMediaPlayer和Windows自带组件播放swf、rmvb、mpg、mp4等视频文件

 

需求

       做软件时,点击进入界面需要播放一段视频,该视频的格式可兼容swf、rmvb、mpg、mp4等视频文件。

 

原理

       使用QMediaPlayer播放rmvb、mpg、mp4格式

(QMediaplayer具体操作细节和疑问参照:http://blog.csdn.net/qq21497936/article/details/78643466

       使用windows Media Player组件播放.swf格式

(对于具体对com的介绍和操作方式以及qt如何使用,将会在后续详细解说,尽请期待。。。)

 

相关博客

Qt实用技巧:视频播放器控件(不依赖系统编解码)

Qt实用技巧:使用OpenCV库操作摄像头拍照、调节参数和视频录制

Qt实用技巧:使用OpenCV库的视频播放器(支持播放器操作,如暂停、恢复、停止、时间、进度条拽托等)

Qt实用技巧:使用QMediaPlayer播放mp4文件

Qt实用技巧:使用QMediaPlayer和Windows自带组件播放swf、rmvb、mpg、mp4等视频文件

 

Demo

       Demo源码下载途径:http://download.csdn.net/download/qq21497936/10135478

 

效果图

播放.mp4

图片.png

播放.swf

图片.png

 

关键操作

组件初始化操作

    // 初始化QAxWidget控件框架相关
    _pAxWidget = new QAxWidget(this);
    _pAxWidget->setObjectName(QString::fromUtf8("axWidget"));
    _pAxWidget->setProperty("geometry", QVariant(QRect(0,0,1024,768)));
    // 绑定控件,下面使用UUID,共4种方式:UUID; Control's class name; Control's full name; from afile
    _pAxWidget->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));

组件窗口大小跟随窗口

void MainWindow::resizeEvent(QResizeEvent *)
{
    // 更新_pAxWidget内部控件的窗口持续大小
    _pAxWidget->setProperty("geometry", QVariant(_pAxWidget->rect()));
}

 

 

源代码

工程文件.pro额外添加

QT += multimedia
QT += multimediawidgets
QT += axcontainer

头文件 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMediaPlayer>
#include <QVideoWidget>
#include <QMediaPlaylist>
#include <QAxWidget>
#include <QResizeEvent>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
protected:
    void resizeEvent(QResizeEvent *);
private slots:
    void btnClicked();
private:
    Ui::MainWindow *ui;
    QAxWidget * _pAxWidget;
    QVideoWidget * _pVideoWidget;
    QMediaPlayer * _pMediaPlayer;
    QMediaPlaylist * _pMediaPlaylist;
};
#endif // MAINWINDOW_H

源码文件 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDebug>
#include <QAxWidget>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 初始化QAxWidget控件框架相关
    _pAxWidget = new QAxWidget(this);
    _pAxWidget->setObjectName(QString::fromUtf8("axWidget"));
    _pAxWidget->setProperty("geometry", QVariant(QRect(0,0,1024,768)));
    // 绑定控件,下面使用UUID,共4种方式:UUID; Control's class name; Control's full name; from afile
    _pAxWidget->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));
    _pAxWidget->hide();
    // 初始化QMediaPlayer框架相关
    _pVideoWidget = new QVideoWidget(this);
    _pMediaPlayer = new QMediaPlayer(this);
    _pMediaPlaylist = new QMediaPlaylist();
    _pMediaPlayer->setVideoOutput(_pVideoWidget);
    QVBoxLayout * pLayout = new QVBoxLayout();
    QHBoxLayout * pLayout2 = new QHBoxLayout();
    QPushButton * pPushButton = new QPushButton();
    pPushButton->setText("打开播放文件");
    connect(pPushButton, SIGNAL(clicked()), this, SLOT(btnClicked()));
    pLayout2->addStretch(1);
    pLayout2->addWidget(pPushButton);
    // 添加到总体布局
    pLayout->addWidget(_pAxWidget, 1);
    pLayout->addWidget(_pVideoWidget, 1);
    pLayout->addLayout(pLayout2);
    ui->centralWidget->setLayout(pLayout);
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::resizeEvent(QResizeEvent *)
{
    // 更新_pAxWidget内部控件的窗口持续大小
    _pAxWidget->setProperty("geometry", QVariant(_pAxWidget->rect()));
}
void MainWindow::btnClicked()
{
    QString path = QFileDialog::getOpenFileName(this, "打开播放文件", ".", "所有文件(*.*)");
    if(path.isEmpty())
        return;
    // 目前只试过这几种格式,window Media Player(window自带播放器) 可播放的格式,都可以使用 _pAxWidget(com组件)播放
    if (path.right(4)==".swf"
            || path.right(5)==".rmvb"
            || path.right(4)==".mpg"
            || path.right(4)==".mp4")
    {
        if(path.right(4)==".swf")
        {
            _pAxWidget->dynamicCall("LoadMovie(int,const QString&)", 0, path);
            _pAxWidget->dynamicCall("Loop",false);
            _pAxWidget->show();
            _pVideoWidget->hide();
        }else
        {
            _pMediaPlaylist->clear();
            _pMediaPlaylist->addMedia(QUrl::fromLocalFile(path));
            _pMediaPlaylist->setCurrentIndex(0);
            _pMediaPlayer->setPlaylist(_pMediaPlaylist);
            _pMediaPlayer->play();
            _pVideoWidget->show();
            _pAxWidget->hide();
        }
    }
}

原博主博客地址:https://blog.csdn.net/qq21497936

原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78651732

 



相关文章
|
5月前
|
计算机视觉 数据格式
使用opencv在Qt控件上播放mp4文件
使用opencv在Qt控件上播放mp4文件
181 2
|
5月前
|
Unix 编译器 开发者
Qt5.14.2 轻松掌握Qt中的压缩与解压缩:QuaZIP的神秘面纱与实战演练之windows环境编译
Qt5.14.2 轻松掌握Qt中的压缩与解压缩:QuaZIP的神秘面纱与实战演练之windows环境编译
528 0
|
3月前
|
存储 算法 C++
【Qt应用开发】复刻经典:基于Qt实现Windows风格计算器(加减乘除、删除、归零功能全解析)
在Qt中,"栈"的概念主要体现在两个层面:一是程序设计中的数据结构——栈(Stack),二是用户界面管理中的QStackedWidget控件。下面我将分别简要介绍这两个方面:
120 4
|
3月前
|
Linux 开发者 iOS开发
QT:基于QMediaPlayer制作的视频播放器(最下方有整合包,可直接运行)
QMediaPlayer是Qt多媒体模块中的一个核心类,它提供了播放音频和视频内容的功能。这个类的设计旨在简化跨平台的媒体播放,使得开发者能够在多种操作系统(如Linux、Windows、macOS及移动平台)上轻松集成多媒体播放能力到他们的应用中,而无需关心底层实现细节。以下是关于QMediaPlayer的一些关键点:
214 1
|
4月前
|
Windows
Windows下对于Qt中带 / 的路径的处理
Windows下对于Qt中带 / 的路径的处理
39 9
|
3天前
|
编译器 Windows
plugin cannot be loaded for module “QtQuick“ && Could not load the Qt platform plugin “windows“
本文讨论了在Qt应用程序中遇到的平台插件加载问题,包括具体的错误信息、解决方案和参考链接。问题表现为无法加载“QtQuick”模块的插件,并且无法找到“windows”平台插件。解决方案是修改环境变量`Qt5_DIR`以使用正确的Qt版本和编译器环境。
|
2月前
|
安全 C++ Windows
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
|
3月前
|
Linux 开发者 iOS开发
QT:基于QMediaPlayer制作的视频播放器(最下方有整合包,可直接运行)
QMediaPlayer是Qt多媒体模块中的一个核心类,它提供了播放音频和视频内容的功能。这个类的设计旨在简化跨平台的媒体播放,使得开发者能够在多种操作系统(如Linux、Windows、macOS及移动平台)上轻松集成多媒体播放能力到他们的应用中,而无需关心底层实现细节。以下是关于QMediaPlayer的一些关键点:
|
4月前
|
Windows
Qtdesigner报错:This application failed to stat could not find or load the Qt platform plugin “windows“
Qtdesigner报错:This application failed to stat could not find or load the Qt platform plugin “windows“
|
4月前
Qt安装 qt-unified-windows-x64-online.exe下载慢
Qt安装 qt-unified-windows-x64-online.exe下载慢