qt 实现视频播放——做屏保方向

使用qt实现播放视频做屏保,通过监听鼠标的移动,滚轮和键盘的操作关闭视频

博客说明:本篇博客介绍如何利用qMediaPlayer和qvideowidget实现视频文件(avi,mp4…)的播放,通过监听鼠标的移动,滚轮和键盘的操作关闭视频

pro文件:
加入QT += multimedia multimediawidgets

Widget.h:


#ifndef WIDGET_H
#define WIDGET_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include
#include
#include 
#include 


namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT


public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
    
private slots:

protected:
    void mouseMoveEvent (QMouseEvent *);   //监听移动鼠标
    void wheelEvent(QWheelEvent *);        //监听滚轮
    void  keyPressEvent(QKeyEvent *);      //监听键盘按键

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

Widget.cpp:

#include "widget.h"
#include "ui_widget.h"
#include 

Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{
    ui->setupUi(this);

    QWidget *widget = new QWidget(this);

    widget->resize(2000,1000);    //设定大小

    QMediaPlayer* player = new QMediaPlayer;   //用于解析视频流的媒体播放器
    QVBoxLayout *layout = new QVBoxLayout;     //用于指定视频播放的位置
    QVideoWidget* vw = new QVideoWidget();   //用于播放视频

    vw->setMouseTracking(true);        //用于监控鼠标移动,跟踪鼠标

    //指定视频播放的位置
    layout->addWidget(vw);
    this->setLayout(layout);

    player->setVideoOutput(vw);               //设置视频输出附加到媒体播放器

    //打开时视频
    QString str = "D:/FRI_YJ.mp4";
    QFile file(str);
    if(!file.open(QIODevice::ReadOnly))
        qDebug() << "Could not open file";

    player->setMedia(QUrl::fromLocalFile("D:/FRI_YJ.mp4")); //打开音视频流文件
    widget->showFullScreen();
    player->play();
}

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


void Widget::mouseMoveEvent (QMouseEvent *)
{
    this->close();
}

void Widget::wheelEvent(QWheelEvent *)
{
    this->close();
}

void  Widget::keyPressEvent(QKeyEvent *)
{
    this->close();
}
在视频播放的时候,就可以通过鼠标的移动,键盘的按下,鼠标滚轮的滑动来退出视频,


实现视频循环播放代码如下

```cpp
#include "widget.h"
#include "ui_widget.h"
#include 

Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{
    ui->setupUi(this);

    QWidget *widget = new QWidget(this);

    widget->resize(2000,1000);    //设定大小

    QMediaPlayer* player = new QMediaPlayer;   //用于解析视频流的媒体播放器
    QVBoxLayout *layout = new QVBoxLayout;     //用于指定视频播放的位置
    QVideoWidget* vw = new QVideoWidget();   //用于播放视频
    QMediaPlaylist *playlist = new QMediaPlaylist();

    vw->setMouseTracking(true);        //用于监控鼠标移动,跟踪鼠标

    player->setPlaylist(playlist);

    //指定视频播放的位置
    layout->addWidget(vw);
    this->setLayout(layout);

    player->setVideoOutput(vw);               //设置视频输出附加到媒体播放器

    //打开时视频
    //    QString str = "D:/aaaa.mp4";
    //    QFile file(str);
    //    if(!file.open(QIODevice::ReadOnly))
    //        qDebug() << "Could not open file";

    playlist->addMedia(QUrl::fromLocalFile("D:/aaaa.mp4"));  //打开视频
    playlist->setCurrentIndex(1);
    //    player->setMedia(QUrl::fromLocalFile("D:/aaaa.mp4")); //打开音视频流文件
    playlist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);
    widget->showFullScreen();
    player->play();


}

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


void Widget::mouseMoveEvent (QMouseEvent *)
{
    this->close();
}

void Widget::wheelEvent(QWheelEvent *)
{
    this->close();
}

void  Widget::keyPressEvent(QKeyEvent *)
{
    this->close();
}

你可能感兴趣的:(学习)