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
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
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
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