1. 程式人生 > >Qt實用技巧:使用QMediaPlayer播放mp4檔案

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

需求

        做軟體時,點選一個按鈕切入另一個介面,需要播放一段動畫

原理

        使用QMediaplayer,QVideoWidget,QMediaPlaylist實現,注意安裝解碼器 lavfilter(本機可播放,但qt不能播放,可能是解碼器的原因)

注意

        無法播放.swf檔案

效果圖


程式碼

1.工程檔案加入 

QT += multimedia
QT += multimediawidgets

2.主介面已經拖入一個QWidget,並使其提升為QVideoWidget,檔案程式碼如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMediaPlayer>
#include <QVideoWidget>
#include <QMediaPlaylist>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_openPlayFile_clicked();

private:
    Ui::MainWindow *ui;
    QMediaPlayer *_oMediaPlayer;
    QMediaPlaylist *_pMediaPlaylist;
};

#endif // MAINWINDOW_H
3.原始檔程式碼如下
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QFileDialog>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    _pMediaPlayer = new QMediaPlayer(this);
    _pMediaPlaylist = new QMediaPlaylist(_mediaPlayer);
    _pMediaPlayer->setVideoOutput(ui->widget);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_openPlayFile_clicked()
{
    QString path = QFileDialog::getOpenFileName(this, "開啟播放檔案", ".", "所有檔案(*.*)");
    if(path.isEmpty())
        return;
    qDebug() << __FILE__ << __LINE__ << path;
    _pMediaPlaylist->clear();
    _pMediaPlaylist->addMedia(QUrl::fromLocalFile(path));
    _pMediaPlaylist->setCurrentIndex(0);
    _pMediaPlayer->setPlaylist(_mediaPlaylist);
    _pMediaPlayer->play();
}