需求

        做软件时,点击一个按钮切入另一个界面,需要播放一段动画。


原理

        使用QMediaplayer,QVideoWidget,QMediaPlaylist实现,注意安装解码器 lavfilter(本机可播放,但qt不能播放,可能是解码器的原因)


注意

        无法播放.swf文件。


效果图

Qt实用技巧:使用QMediaPlayer播放mp4文件_视频播放器


代码

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();
}