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
原博主部落格地址:http://blog.csdn.net/qq21497936#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/article/details/78651732
相關推薦
Qt實用技巧:使用QMediaPlayer和Windows自帶元件播放swf、rmvb、mpg、mp4等視訊檔案
需求 做軟體時,點選進入介面需要播放一段視訊,該視訊的格式可相容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.js和windows自帶播放外掛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=
SA:T1編寫主函數法和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