PDA

View Full Version : PaintEvent on a Widget doesn't work on QGraphicsScene?



SlaynX
24th May 2011, 13:33
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>

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(next Frame()));

}

void Missle1::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawPixmap(0,0,(*mCurrentSprites)[currentFrame]);
}

void Missle1::nextFrame()
{
currentFrame = ++currentFrame % 3;
repaint();
}


The Widget which handles QGraphicScene and QGraphicsView



//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()
{

}

joyer83
24th May 2011, 17:29
Try showing the Missle1-widget:

rocket->show();

Also, you could try to give the missle1 a minimum width and height.