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

来源:互联网 发布:淘宝店铺男装推荐 编辑:程序博客网 时间:2024/06/04 18:39

Qt实用技巧:使用QMediaPlayer和Windows自带组件播放swf、rmvb、mpg、mp4等视频文件
原创 2017年11月28日 09:56:51
标签:
swf /
qt使用windows组件 /
组件 /
rmvb /
播放器
32
原博主博客地址:http://blog.csdn.net/qq21497936
本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78651732
需求
        做软件时,点击进入界面需要播放一段视频,该视频的格式可兼容swf、rmvb、mpg、mp4等视频文件。
原理
        使用QMediaPlayer播放rmvb、mpg、mp4格式
(QMediaplayer具体操作细节和疑问参照:http://blog.csdn.net/qq21497936/article/details/78643466)
        使用windows Media Player组件播放.swf格式
(对于具体对com的介绍和操作方式以及qt如何使用,将会在后续详细解说,尽请期待。。。)
效果图
播放.mp4
 
播放.swf
 
关键操作
组件初始化操作
[cpp] view plain copy
1. // 初始化QAxWidget控件框架相关  
2. _pAxWidget = new QAxWidget(this);  
3. _pAxWidget->setObjectName(QString::fromUtf8("axWidget"));  
4. _pAxWidget->setProperty("geometry", QVariant(QRect(0,0,1024,768)));  
5. // 绑定控件,下面使用UUID,共4种方式:UUID; Control's class name; Control's full name; from afile  
6. _pAxWidget->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));  
组件窗口大小跟随窗口
[cpp] view plain copy
1. void MainWindow::resizeEvent(QResizeEvent *)  
2. {  
3.    // 更新_pAxWidget内部控件的窗口持续大小  
4.    _pAxWidget->setProperty("geometry", QVariant(_pAxWidget->rect()));  
5. }  




源代码
工程文件.pro额外添加
[cpp] view plain copy
1. QT += multimedia  
2. QT += multimediawidgets  
3. QT += axcontainer  
头文件 mainwindow.h
[cpp] view plain copy
1. #ifndef MAINWINDOW_H  
2. #define MAINWINDOW_H  
3.  
4. #include <QMainWindow>  
5. #include <QMediaPlayer>  
6. #include <QVideoWidget>  
7. #include <QMediaPlaylist>  
8. #include <QAxWidget>  
9. #include <QResizeEvent>  
10.  
11. namespace Ui {  
12. class MainWindow;  
13. }  
14.  
15. class MainWindow : public QMainWindow  
16. {  
17.    Q_OBJECT  
18.  
19. public:  
20.    explicit MainWindow(QWidget *parent = 0);  
21.    ~MainWindow();  
22.  
23. protected:  
24.    void resizeEvent(QResizeEvent *);  
25.  
26. private slots:  
27.    void btnClicked();  
28.  
29. private:  
30.    Ui::MainWindow *ui;  
31.    QAxWidget * _pAxWidget;  
32.    QVideoWidget * _pVideoWidget;  
33.    QMediaPlayer * _pMediaPlayer;  
34.    QMediaPlaylist * _pMediaPlaylist;  
35. };  
36.  
37. #endif // MAINWINDOW_H  
源码文件 mainwindow.cpp
[cpp] view plain copy
1. #include "mainwindow.h"  
2. #include "ui_mainwindow.h"  
3.  
4. #include <QFileDialog>  
5. #include <QDebug>  
6. #include <QAxWidget>  
7. #include <QHBoxLayout>  
8. #include <QVBoxLayout>  
9. #include <QPushButton>  
10.  
11. MainWindow::MainWindow(QWidget *parent) :  
12.    QMainWindow(parent),  
13.    ui(new Ui::MainWindow)  
14. {  
15.    ui->setupUi(this);  
16.    // 初始化QAxWidget控件框架相关  
17.    _pAxWidget = new QAxWidget(this);  
18.    _pAxWidget->setObjectName(QString::fromUtf8("axWidget"));  
19.    _pAxWidget->setProperty("geometry", QVariant(QRect(0,0,1024,768)));  
20.    // 绑定控件,下面使用UUID,共4种方式:UUID; Control's class name; Control's full name; from afile  
21.    _pAxWidget->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));  
22.    _pAxWidget->hide();  
23.    // 初始化QMediaPlayer框架相关  
24.    _pVideoWidget = new QVideoWidget(this);  
25.    _pMediaPlayer = new QMediaPlayer(this);  
26.    _pMediaPlaylist = new QMediaPlaylist();  
27.    _pMediaPlayer->setVideoOutput(_pVideoWidget);  
28.  
29.    QVBoxLayout * pLayout = new QVBoxLayout();  
30.    QHBoxLayout * pLayout2 = new QHBoxLayout();  
31.    QPushButton * pPushButton = new QPushButton();  
32.    pPushButton->setText("打开播放文件");  
33.    connect(pPushButton, SIGNAL(clicked()), this, SLOT(btnClicked()));  
34.    pLayout2->addStretch(1);  
35.    pLayout2->addWidget(pPushButton);  
36.  
37.    // 添加到总体布局  
38.    pLayout->addWidget(_pAxWidget, 1);  
39.    pLayout->addWidget(_pVideoWidget, 1);  
40.    pLayout->addLayout(pLayout2);  
41.    ui->centralWidget->setLayout(pLayout);  
42. }  
43.  
44. MainWindow::~MainWindow()  
45. {  
46.    delete ui;  
47. }  
48.  
49. void MainWindow::resizeEvent(QResizeEvent *)  
50. {  
51.    // 更新_pAxWidget内部控件的窗口持续大小  
52.    _pAxWidget->setProperty("geometry", QVariant(_pAxWidget->rect()));  
53. }  
54.  
55. void MainWindow::btnClicked()  
56. {  
57.    QString path = QFileDialog::getOpenFileName(this, "打开播放文件", ".", "所有文件(*.*)");  
58.    if(path.isEmpty())  
59.        return;  
60.    // 目前只试过这几种格式,window Media Player(window自带播放器) 可播放的格式,都可以使用 _pAxWidget(com组件)播放  
61.    if (path.right(4)==".swf"  
62.            || path.right(5)==".rmvb"  
63.            || path.right(4)==".mpg"  
64.            || path.right(4)==".mp4")  
65.    {  
66.        if(path.right(4)==".swf")  
67.        {  
68.            _pAxWidget->dynamicCall("LoadMovie(int,const QString&)", 0, path);  
69.            _pAxWidget->dynamicCall("Loop",false);  
70.            _pAxWidget->show();  
71.            _pVideoWidget->hide();  
72.        }else  
73.        {  
74.            _pMediaPlaylist->clear();  
75.            _pMediaPlaylist->addMedia(QUrl::fromLocalFile(path));  
76.            _pMediaPlaylist->setCurrentIndex(0);  
77.            _pMediaPlayer->setPlaylist(_pMediaPlaylist);  
78.            _pMediaPlayer->play();  
79.            _pVideoWidget->show();  
80.            _pAxWidget->hide();  
81.        }  
82.    }  
83. }  

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq语音红包生僻字怎么办 生僻字上不了户口怎么办 7岁儿童结巴怎么办 小孩咳喘有痰怎么办 都说我不爱说话怎么办 宝宝突然结巴了怎么办 淘宝客户不理人怎么办 遇到不说话客户怎么办 同学群没人聊怎么办 群里没人说话怎么办 儿童说话声音沙哑怎么办 孩子不和外人说话怎么办 同学退群该怎么办 宝宝睡觉枕头湿怎么办 一个多月的小宝宝便秘怎么办 小宝宝便秘拉屎困难怎么办 一岁小宝宝便秘怎么办 客户不听我说话怎么办 微信上客户不理怎么办 小宝宝母乳不够吃怎么办 小宝宝吃母乳拉肚子怎么办 母乳小宝宝吃奶吃不了怎么办 婴儿感冒吐奶怎么办 小孩感冒吐奶怎么办 小孩吐奶怎么办月子 新生儿一直吐奶怎么办 宝宝50天吐奶厉害怎么办 小儿吐奶厉害怎么办 宝宝一直便秘了怎么办 误建了微信群聊怎么办 新生儿大口吐奶怎么办 宝宝喝了就吐奶怎么办 婴儿顿顿吐奶怎么办 说话着急就结巴怎么办 幼儿舌头长泡怎么办 一着急说话结巴怎么办 幼儿舌头又溃疡怎么办 3儿童说话结巴怎么办 孩子小舌头短怎么办? 6岁讲话不清楚怎么办 三岁宝宝结巴怎么办