qt/LedOK/player/elegif.cpp
2023-04-18 14:14:46 +08:00

33 lines
1010 B
C++

#include "elegif.h"
#include <QPainter>
#include <QMovie>
EleGif::EleGif(QString path, QWidget *parent) : QWidget{parent} {
movie = new QMovie(path, QByteArray(), this);
movie->setCacheMode(QMovie::CacheAll);
movie->jumpToFrame(0);
}
void EleGif::paintEvent(QPaintEvent *){
QPainter painter(this);
if(movie!=nullptr) {
painter.setRenderHints(QPainter::Antialiasing|QPainter::SmoothPixmapTransform);
painter.drawPixmap(0, 0, width(), height(), movie->currentPixmap());
if(timer==nullptr) {
timer = new SyncTimer(movie->nextFrameDelay());
connect(timer, &SyncTimer::timeout, this, &EleGif::sltNext, Qt::BlockingQueuedConnection);
timer->start();
}
}
}
void EleGif::sltNext(){
if(isVisible()) {
movie->jumpToNextFrame();
timer->inter = movie->nextFrameDelay();
update();
} else if(timer!=nullptr) {
timer->stop();
timer = nullptr;
}
}