Communication entre deux classes
Bonjour à tous.
Bon voilà, j'essaie de trouver une solution a un problème assez lourdingue de communication entre deux classes :
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
| #ifndef MAINFRAME_H
#define MAINFRAME_H
#include "VistaWindow.h"
#include "Legende.h"
#include <sstream>
const int MAINFRAME_WIDTH = 1000; //Constante fixant la largeur de la fenêtre.
const int MAINFRAME_HEIGHT = 800; //Constante fixant la hauteur de la fenêtre.
class MainFrame : public QWidget
{
Q_OBJECT
private:
QGridLayout gLayout; //Layout mettant en forme la fenêtre.
QLabel lbl_right; //Label en haut à droite.
QLabel lbl_left; //Label en haut à gauche.
QGridLayout vBox; //Me permettera de placer tout les objets nécessaires à gauche de la fenêtre openGL
VistaWindow vwd; //Fenêtre openGL.
int vbElem = 0;
void centerOnScreen(); //Fonction permettant de centrer la fenêtre. Non utilisable pour le client.
protected:
void showEvent(QShowEvent *event); //S'active quand un widget devient visible.
public:
MainFrame(); //Constructeur.
void addVBoxLabel(QString); //Fonction pour ajouter un élément de type Label à la partie de gauche.
void addLegende(string lbl, int r, int g, int b);
void keyPressEvent(QKeyEvent *keyEvent);
void setLbl_Left(string);
void setLbl_Right(string);
public slots:
void getTxtSig(QString & text);
};
#endif // MAINFRAME_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 37 38 39 40 41 42 43 44 45
| #ifndef VISTAWINDOW_H
#define VISTAWINDOW_H
#include "VistaWidget.h"
//#include "MainFrame.h"
//class MainFrame;
class VistaWindow : public VistaWidget
{
Q_OBJECT //Indique qu'il s'agit d'un objet d'interface graphique.
private:
point location; //centre de la caméra.
int rayon; //rayon de la caméra.
vector<string> directories; //dossiers à explorer
int dirCounter = 0; //dossier lu
signals:
void status(QString & text);
public:
explicit VistaWindow(QWidget *parent=0);
void initializeGL(); //Initialise le widget OpenGL avec certains paramètres.
void resizeGL(int w, int h); //Fonction utilisée en cas de modification de la
//fenêtre OpenGL. Equivalent au reshape() utilisé habituellement.
void paintGL(); //Permettra de dessiner les objets OpenGL dans le widget.
void keyPressEvent(QKeyEvent *keyEvent);
int countLines(string); //Compte les lignes dans le fichier passé en paramètre.
void drawFromFile(string); //Lis le fichier passé en paramètre et extrait
void drawFromFile(string, point, point);
void drawScene(point, d_lambert93, bool);
void setDrawArea(point &, point &, point &, d_lambert93);
bool inArea(point, point, point);
void setLocation(point);
void setRayon(int);
point getLocation();
int getRayon();
void addDirectory(string);
void setDirCounter(int);
int getDirCounter();
int numDirectories();
string getDirectory(int);
//void setMainFrame(MainFrame);
};
#endif // VISTAWINDOW_H |
Ici vous avez deux classes : la première (MainFrame) c'est une fenêtre qui sert de conteneur à ma deuxième : un widget openGL (VistaWindow). L'idée c'est de faire en sorte à ce que je puisse faire passer des messages en provenance de ma classe VistaWidget vers ma classe MainFrame (pour que je puisse changer un des deux labels). Le truc c'est que je n'ai aucune idée de comment procéder. J'ai déjà essayé de donner un paramètre de type MainFrame à VistaWindow mais le programme s’arrêtait dès l'ouverture. J'ai aussi essayé les signaux, avant de me rendre compte que ça marchera pas dans le bon sens étant donné que j'ai besoin de déclarer un objet de type MainFrame dans VistaWindow. Et je suis déjà bloqué sur ce problème depuis un bout de temps. :/
A l'aide s'il vous plaît. :aie: