qt/LedOK/player/elevideo - 副本.cpp
2022-08-25 18:37:24 +08:00

39 lines
1.5 KiB
C++

#include "elevideo.h"
#include "tools.h"
#include <QGraphicsVideoItem>
#include <QMediaPlaylist>
#include <QMessageBox>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/imgutils.h>
EleVideo::EleVideo(QString path, int w, int h, QWidget *parent) : QGraphicsView{parent} {
setFrameStyle(QFrame::NoFrame);
setScene(new QGraphicsScene(this));
setBackgroundBrush(QColor(0,0,0));
auto videoItem = new QGraphicsVideoItem();
videoItem->setSize(QSize(w,h));
videoItem->setAspectRatioMode(Qt::IgnoreAspectRatio);
scene()->addItem(videoItem);
player = new QMediaPlayer(videoItem);
player->setVideoOutput(videoItem);
connect(player, &QMediaPlayer::mediaStatusChanged, this, [this](QMediaPlayer::MediaStatus status){
if(status==QMediaPlayer::EndOfMedia) {
if(player->state() != QMediaPlayer::PlayingState && isVisible()) player->play();
}
});
void(QMediaPlayer::*player_error)(QMediaPlayer::Error) = &QMediaPlayer::error;
connect(player, player_error, this, [this](QMediaPlayer::Error error){
QMessageBox::critical(this, "Video Error", Tools::playerErrStr(error)+": "+player->errorString());
});
player->setMedia(QUrl::fromLocalFile(path));
}
void EleVideo::showEvent(QShowEvent *) {
if(player!=nullptr && player->state() != QMediaPlayer::PlayingState) player->play();
}
void EleVideo::hideEvent(QHideEvent *) {
if(player!=nullptr) player->stop();
}