Qt實用技巧:使用QMediaPlayer播放mp4檔案
阿新 • • 發佈:2019-01-06
需求
做軟體時,點選一個按鈕切入另一個介面,需要播放一段動畫
原理
使用QMediaplayer,QVideoWidget,QMediaPlaylist實現,注意安裝解碼器 lavfilter(本機可播放,但qt不能播放,可能是解碼器的原因)
注意
無法播放.swf檔案
效果圖
程式碼
1.工程檔案加入
QT += multimedia
QT += multimediawidgets
2.主介面已經拖入一個QWidget,並使其提升為QVideoWidget,檔案程式碼如下:
3.原始檔程式碼如下#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
#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(); }