Hey there,
I was trying to use a QPaintEvent to paint QList<QPixmap>, an animation sprite and then add it QGraphicsScene. It did paint the animation when I run it however it did not seem to paint it into the scene. Can someone help me to solve this dilemma? Here's the code:
//header
#ifndef MISSLE1_H
#define MISSLE1_H
#include <QGraphicsItem>
#include <QPaintEvent>
#include <QList>
#include <QPoint>
#include <QWidget>
#include <QTimer>
{
Q_OBJECT
public:
Missle1();
// void changeDir();
public Q_SLOTS:
void nextFrame();
private:
int currentFrame;
QList<QPixmap> RocketFrame;
QList<QPixmap> *mCurrentSprites;
};
//C++
#include "Missle1.h"
#include <QTimer>
#include <QPaintEvent>
#include <QPainter>
Missle1::Missle1()
{
RocketFrame.
append(QPixmap(":/MissleTest1.png"));
RocketFrame.
append(QPixmap(":/MissleTest2.png"));
RocketFrame.
append(QPixmap(":/MissleTest3.png"));
mCurrentSprites = &RocketFrame;
currentFrame = 0;
TimeFrame->start(50);
connect(TimeFrame,SIGNAL(timeout()),this,SLOT(nextFrame()));
}
{
painter.drawPixmap(0,0,(*mCurrentSprites)[currentFrame]);
}
void Missle1::nextFrame()
{
currentFrame = ++currentFrame % 3;
repaint();
}
//header
#ifndef MISSLE1_H
#define MISSLE1_H
#include <QGraphicsItem>
#include <QPaintEvent>
#include <QList>
#include <QPoint>
#include <QWidget>
#include <QTimer>
class Missle1 : public QWidget
{
Q_OBJECT
public:
Missle1();
void paintEvent(QPaintEvent *);
// void changeDir();
public Q_SLOTS:
void nextFrame();
private:
int currentFrame;
QList<QPixmap> RocketFrame;
QList<QPixmap> *mCurrentSprites;
QPoint mPos;
QTimer *TimeFrame;
};
//C++
#include "Missle1.h"
#include <QTimer>
#include <QPaintEvent>
#include <QPainter>
Missle1::Missle1()
{
RocketFrame.append(QPixmap(":/MissleTest1.png"));
RocketFrame.append(QPixmap(":/MissleTest2.png"));
RocketFrame.append(QPixmap(":/MissleTest3.png"));
mCurrentSprites = &RocketFrame;
currentFrame = 0;
TimeFrame = new QTimer(this);
TimeFrame->start(50);
connect(TimeFrame,SIGNAL(timeout()),this,SLOT(nextFrame()));
}
void Missle1::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawPixmap(0,0,(*mCurrentSprites)[currentFrame]);
}
void Missle1::nextFrame()
{
currentFrame = ++currentFrame % 3;
repaint();
}
To copy to clipboard, switch view to plain text mode
The Widget which handles QGraphicScene and QGraphicsView
//header
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include "QtGui"
#include "Missle1.h"
{
Q_OBJECT
public:
explicit Widget
(QWidget *parent
= 0);
~Widget();
private:
Missle1 *rocket;
};
#endif // WIDGET_H
//C++
#include "widget.h"
#include "QtGui"
//#include "ui_widget.h"
{
//QPushButton *button = new QPushButton("Hello");
rocket = new Missle1();
scene->setSceneRect(0,0,300,300);
scene->addWidget(rocket);
view->show();
}
Widget::~Widget()
{
}
//header
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include "QtGui"
#include "Missle1.h"
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
QGraphicsScene *scene;
QGraphicsView *view;
Missle1 *rocket;
};
#endif // WIDGET_H
//C++
#include "widget.h"
#include "QtGui"
//#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent)
{
//QPushButton *button = new QPushButton("Hello");
scene = new QGraphicsScene(this);
rocket = new Missle1();
view = new QGraphicsView(scene,this);
scene->setSceneRect(0,0,300,300);
scene->addWidget(rocket);
view->show();
}
Widget::~Widget()
{
}
To copy to clipboard, switch view to plain text mode
Bookmarks