1. 程式人生 > >Qt實用技巧:使用QMediaPlayer和Windows自帶元件播放swf、rmvb、mpg、mp4等視訊檔案

Qt實用技巧:使用QMediaPlayer和Windows自帶元件播放swf、rmvb、mpg、mp4等視訊檔案

需求

        做軟體時,點選進入介面需要播放一段視訊,該視訊的格式可相容swf、rmvb、mpg、mp4等視訊檔案。

原理

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

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

(對於具體對com的介紹和操作方式以及qt如何使用,將會在後續詳細解說,盡請期待。。。)

Demo

效果圖

播放.mp4
播放.swf

關鍵操作

元件初始化操作

    // 初始化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();
        }
    }
}
原博主部落格地址:http://blog.csdn.net/qq21497936
本文章部落格地址:http://blog.csdn.net/qq21497936/article/details/78651732

相關推薦

Qt實用技巧使用QMediaPlayerWindows元件播放swfrmvbmpgmp4視訊檔案

需求         做軟體時,點選進入介面需要播放一段視訊,該視訊的格式可相容swf、rmvb、mpg、mp4等視訊檔案。 原理         使用QMediaPlayer播放rmvb、mpg、mp4格式         使用windows Media Player

Qt實用技巧基於tcp的C/S構架多人聊天程式(線上離線離線資訊再次登入後傳送

需求         多人聊天室程式,基於TCP和C/S構架,需要離線後可對離線者傳送資訊,待離線者上線後可收到上次傳送的離線資訊 技術點     1.TCP連線伺服器     2.伺服器得儲存所有客戶端列表,包括線上的不線上的     3.伺服器得通知每個客戶端當前線上

Qt實用技巧使用QMediaPlayer播放mp4檔案

需求         做軟體時,點選一個按鈕切入另一個介面,需要播放一段動畫 原理         使用QMediaplayer,QVideoWidget,QMediaPlaylist實現,注意安裝解碼器 lavfilter(本機可播放,但qt不能播放,可能是解碼器的原因)

Qt實用技巧使用Qt給指定手機發送簡訊(點對點群發等等)

需求        軟體控制簡訊提醒客戶驗證碼等等,如生日提醒、購買提醒、時間限制等等。Demo下載地址Demo效果截圖簡訊平臺介紹        軟體傳送簡訊需要第三方平臺支援,步驟如下:        1.註冊指定雲平臺賬戶,一般有免費簡訊條數,筆者使用“雲通知”;   

Qt實用技巧ubuntu釋出程式打包流程(解決外掛xcb載入失敗)

原博主部落格地址:https://blog.csdn.net/qq21497936 本文章部落格地址:https://blog.csdn.net/qq21497936/article/details/85396652          

Qt實用技巧使用Qt載入超大圖片的耗時測試

需求         某機器人專案中,需要載入構建的地圖,此處僅測試直接載入圖片的時間。   相關部落格 《QT三大繪圖類:QPixmap/QImage/QPicture》:https://blog.csdn.net/qq2149

Qt實用技巧設計模式之單例模式,唯一例項類通用模板

需求         Qt常需要一個類,全域性呼叫,是設計模式中的單例模式。 單例模式         單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的類一個類只有一個例項。即一個類只有一個物

Qt實用技巧Qt併發伺服器通訊,受同一時刻最大執行緒數限制(筆者本本同一時刻600多)

需求        預言專案需要寫個qt伺服器,終端與qt伺服器完成socket通訊,因存在多個裝置,單個傳輸檔案大小比較大,所以做多執行緒併發。實現原理        客戶端:固定client的執行緒數量,單個執行緒按照設定的間隔不斷髮送資料給伺服器,並接收伺服器的執行緒指

Qt實用技巧會呼吸的痛(呼吸點/呼吸燈)

Qt實用技巧:會呼吸的痛(呼吸點/呼吸燈) 感謝 Demo效果          入坑         主視窗為QWidget的子類時,不論設定QPallet和setStyleSheets設定背景圖片是無法生效的,但設定顏色卻可以生效。 Demo目錄結構

Qt實用技巧QPainterPath繪圖路徑(多次畫同樣的圖形集合)

需求         根據配置檔案,可不改變程式只調整配置檔案可調整主頁面上的字串。 原理         1.讀取檔案,固定格式(檔案在本文章中省略)         2.寫一串字元,使用QPainterPath         3.注意QPainter的時候,需

用video.jswindows播放外掛MediaPlayer實現視訊播放

由於本人在搜尋資料沒有找到video.js外掛支援ie8的方法,所以在做檢視視訊的功能時想法是這樣的,對於谷歌和IE10以上用video.js的方法實現,而IE9及IE8用MediaPlayer實現。下面是實現程式碼(只測試過mp4格式的): 1.video.js實現 &

shell實用技巧檔案統計資訊銀行賬戶管理系統

需求        寫一個shell程式命名為wc.sh,統計檔案字元數、行數和單詞數。        寫一個shell程命名為bank.sh,完成以下功能:退出、存款、取款、新增賬戶、刪除賬戶、查詢賬戶、顯示所有賬戶,所有資訊儲存在account.dat檔案中,每次操作會實

c實用技巧檔案統計資訊銀行賬戶管理系統

需求        寫一個shell程式命名為wc,統計檔案字元數、行數和單詞數。        寫一個shell程命名為bank,完成以下功能:退出、存款、取款、新增賬戶、刪除賬戶、查詢賬戶、顯示所有賬戶,所有資訊儲存在account.dat檔案中,每次操作會實時更新acc

form表單的應用form對象屬性方法及提交時提交的數據.....

uil nsf fileread tex class dataurl asd who accept 1.html中含有form表單 (1)html <form id="picLoad" class="lt" style="width: 230px;" enctype=

SAT1編寫主函數法T2Matlab的SA工具箱GUI法,兩種方法實現對二元函數優化求解——Jason niu

lin plot itl 最優解 IT 主函數 alt 圖片 gui %SA:T1法利用Matlab編寫主函數實現對定義域[-5,5]上的二元函數求最優解—Jason niu [x,y] = meshgrid(-5:0.1:5,-5:0.1:5); z = x.^2 +

Qt開發技巧編寫.pro檔案,在構建流程中加入命令列的方法

1、在專案構建前執行命令 在專案構建前執行命令cmd 存在問題 system(cmd) 存在執行多次的問題,可以參考message函式的QMake Manual說明

QT如何定義滑鼠樣式及如何用windows畫圖工具進行滑鼠樣式的設計

眾所周知,QT系統自身擁有眾多的滑鼠樣式,這些滑鼠樣式均比較常見,顏色、樣式為系統所固有,無法更改。哪麼能不能自定義滑鼠的形狀、顏色等特點呢?答案是可以的。自定義的滑鼠樣式可以隨意指定,顏色更是多種多樣,極具個性化。 QT自帶的滑鼠樣式(在此不做過多介紹): 可以直接拿來用,具體用法如下:

BCGControlBar教程鍵盤滑鼠定義

BCGControlBar Library框架允許實現全鍵盤和滑鼠自定義。 鍵盤和滑鼠自定義功能由CBCGPToolbarCustomize類處理。 此類的物件是屬性表,其中包含“鍵盤”和“滑鼠”頁面以及其他自定義頁面。 看一下“Keyboard”和“Mouse”屬性頁面的圖片:

實用技巧Spring Cloud中,如何優雅下線微服務?

原文:http://www.itmuch.com/spring-cloud-sum/how-to-unregister-service-in-eureka/ ,轉載請說明出處。 在生產環境中,服務的上下線是不可避免的,我們希望能夠優雅地下線微服務。本文基於Spring Boot 2.x + Spring

【本人禿頂程式設計師】實用技巧Spring Cloud中,如何優雅下線微服務

←←←←←←←←←←←← 我都禿頂了,還不點關注! 在生產環境中,服務的上下線是不可避免的,我們希望能夠優雅地下線微服務。本文基於Spring Boot 2.x + Spring Cloud Finchley講解實際專案中優雅下線服務的四種方式,並探討各方式的優缺點。 注:S