Bonjour à tous.
Bon voilà, j'essaie de trouver une solution a un problème assez lourdingue de communication entre deux classes :
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 #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_HIci 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. :/
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
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
A l'aide s'il vous plaît.
Partager