IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Communication entre deux classes


Sujet :

Qt

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 41
    Points : 21
    Points
    21
    Par défaut 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 : 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_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
    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.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    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.
    Et bien, vous avez les deux solutions que j'imaginais.
    Pour la première, elle devrait fonctionner mais vous avez eu un souci avec les pointeurs/référence. Un petit débogage vous aurait permis de comprendre la raison rapidement.
    Pour les signaux, il suffit de faire le connect dans la classe MainFrame . Du coup, VistaWindow n'a pas du tout besoin de connaître MainFrame.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/07/2013, 22h25
  2. Communication entre deux classes impossible
    Par juyn89 dans le forum Langage
    Réponses: 1
    Dernier message: 30/06/2012, 18h52
  3. [Débutant] Communication entre deux classes
    Par Gualino dans le forum VB.NET
    Réponses: 26
    Dernier message: 07/09/2011, 10h43
  4. Communication entre deux classes indépendantes
    Par hazem2410 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 01/12/2010, 20h12
  5. Communication entre deux classes
    Par Luigicube dans le forum C#
    Réponses: 12
    Dernier message: 04/12/2009, 16h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo