LINUX.ORG.RU

Анимация QMovie в QPainter

 , qmovie, ,


0

2

Здравствуйте. Уже третий день ломаю голову над тем, как реализовать анимацию QMovie через QPainter. У QPainter есть сигнал drawPixmap(), а у QMovie функция currentPixmap(). Как бы сие объединить? Заранее спасибо.

★★★★★

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QMovie>
#include <QLabel>
#include <QGridLayout>

#include "mywidget.h"

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

    QGridLayout* layout = new QGridLayout();
    ui->centralWidget->setLayout(layout);

    QMovie* movie = new QMovie("fire.gif");

//    QLabel *label = new QLabel();
//    layout->addWidget(label);
//    label->setMovie(movie);

    MyWidget* widget = new MyWidget();
    layout->addWidget(widget);
    widget->setMovie(movie);

    movie->start();
}

MainWindow::~MainWindow()
{
    delete ui;
}
mywidget.cpp
#include "mywidget.h"

#include <QMovie>
#include <QPainter>

MyWidget::MyWidget(QWidget* parent):
    QWidget(parent), movie(0)
{
}

void MyWidget::setMovie(QMovie* movie)
{
    this->movie = movie;
    connect(movie, SIGNAL(frameChanged(int)), this, SLOT(frameChanged(int)));
}

void MyWidget::paintEvent(QPaintEvent*e)
{
    if(movie==0)
        QWidget::paintEvent(e);
    else
    {
        QPainter painter(this);
        painter.drawPixmap(0,0,movie->currentPixmap());
    }
}

void MyWidget::frameChanged(int frame)
{
    repaint();
}
mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

class QMovie;

class MyWidget: public QWidget
{
    Q_OBJECT
public:
    MyWidget(QWidget* parent = 0);
public:
    void setMovie(QMovie* movie);
    void paintEvent(QPaintEvent*);
private:
    QMovie* movie;
public slots:
    void frameChanged(int frame);
};

#endif // MYWIDGET_H

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.