Mise à jour de l'affichage
Bonsoir,
Je code en ce moment un espèce de plateau avec des pions dessus, pour le moment c'est très basique (mais c'est déjà beaucoup découpé ^^)
Je place un "etre" (hérité de QObject) dans un "monde" hérité de QGraphicsScene de la manière suivante :
etre.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #ifndef ETRE_H
#define ETRE_H
#include <QObject>
#include <QColor>
#include <QRectF>
class Etre : public QObject
{
Q_OBJECT
public:
Etre();
~Etre();
int GetX() {return x;}
int GetY() {return y;}
QRectF GetRect() {return *rect;}
QColor GetColor() {return color;}
//fonction de déplacement
void Translate(int dx, int dy);
void MoveTo(int X, int Y);
signals:
void AppelMAJTerrain();
private:
int x;
int y;
QColor color;
QRectF *rect;
};
#endif // ETRE_H |
etre.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
#include "etre.h"
#include <QDebug>
Etre::Etre()
{
x = 5;
y = 3;
color = QColor(255, 0, 0);
rect = new QRectF();
rect->setWidth(50);
rect->setHeight(50);
this->MoveTo(x,y);
}
Etre::~Etre()
{
delete rect;
}
void Etre::Translate(int dx, int dy)
{
rect->translate(dx*50,dy*50);
x += dx;
y += dy;
emit AppelMAJTerrain();
}
void Etre::MoveTo(int X, int Y)
{
x = X;
y = Y;
rect->moveTo(x*50,y*50);
emit AppelMAJTerrain();
} |
monde.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
#ifndef MONDE_H
#define MONDE_H
#include <QGraphicsScene>
#include <QRect>
#include "etre.h"
class Monde : public QGraphicsScene
{
Q_OBJECT
public:
explicit Monde(QObject *parent = 0);
~Monde();
signals:
public slots:
void MAJ();
private:
Etre *etre1;
};
#endif // MONDE_H |
monde.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
#include "monde.h"
#include <QDebug>
Monde::Monde(QObject *parent) :QGraphicsScene(parent)
{
//construction du tableau de lignes A METTRE EN FONCTION
for(int i = 0; i < 11; i ++)
{
this->addLine(0,i*50,500,i*50);
this->addLine(i*50,0,i*50,500);
}
//test avec un etre
etre1 = new Etre;
this->addRect(etre1->GetRect(),QPen(),QBrush(etre1->GetColor()));
QObject::connect(etre1,SIGNAL(AppelMAJTerrain()),this,SLOT(MAJ())); //connexion pour mise à jour
etre1->MoveTo(4,2);
etre1->Translate(2,-1);
}
Monde::~Monde()
{
delete etre1;
}
void Monde::MAJ()
{
this->advance(); //ici normalement mise à jour
} |
Mon problème est que la fonction advance qui est censé me mettre à jour mon affichage (j'ai déjà réussi certains tests avec) ne me fait plus rien ici, c'est fort facheux. ^^
L'idée de mon code est que c'est l'etre qui va se bouger et dire un monde "youhou met toi à jour !" c'est pour cela que je procède ainsi :)
Si vous avez une petit idée de méthode ou de fonction je suis preneur , merci d'avance !
Peace