#include "elevideo.h" #include "tools.h" #include #include #include #include #include #include #include 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(); }