qt制作视频播放器需要用到 QVideoWidget,QMediaPlayer,QMediaPlaylist,这几个类,在.pro文件中加入 QT += multimediawidgets即可
虽然已经有了这个类,但是因为qt本身并没有解码器,所有还需要下载一个解码器,解码器网上有很多,可以自己去搜索,博主用的是LAVFilters-0.65,也可以在评论区留下邮箱,我发你。
前期准备工作就这么多,然后就是编写程序。
.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QMediaPlayer>
#include <QLabel>
class Widget : public QWidget
{
Q_OBJECT
protected:
void mousePressEvent(QMouseEvent *event);
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
bool m_bChecked=false;
QLabel *label;
QMediaPlayer *myPlayer;
};
#endif // WIDGET_H
.cpp 文件
#include "widget.h"
#include <QVideoWidget>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QVBoxLayout>
#include <QLabel>
#include <QMouseEvent>
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
myPlayer = new QMediaPlayer(this);
QVideoWidget *video = new QVideoWidget(this);
QMediaPlaylist *playlist = new QMediaPlaylist;
playlist->addMedia(QUrl("C:/Users/dujia/Desktop/a.mp4")); //添加2个一样的目的是为了实现循环播放
playlist->addMedia(QUrl("C:/Users/dujia/Desktop/a.mp4"));
playlist->setCurrentIndex(1);
playlist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);
video->resize(1104, 622);
myPlayer->setPlaylist(playlist);
myPlayer->setVideoOutput(video);
myPlayer->play();
}
Widget::~Widget()
{
}
void Widget::mousePressEvent(QMouseEvent *event)
{
m_bChecked=!m_bChecked;
if(m_bChecked)
{
myPlayer->pause(); //第一次点击暂停
}
else
{
myPlayer->play(); //第二次点击播放
}
}
好了,有什么不懂的欢迎提问。