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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
monde.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager