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

Discussion :

Communication entre objet

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut Communication entre objet
    Bonjour à tous!

    dans mon projet, je dois faire communiquer deux classes cameraSettings et camera qui sont créées en même temps.
    camera dialogue avec une camera qui lui est associé, et cameraSettings est une interface graphique pour régler les paramètres d'utilisation de la caméra. Il est donc impératif que ces deux classes puissent s'échanger des informations.
    Pour ce faire j'ai déclaré dans chaque classes une variable du type de l'autre 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
    //cameraSettings.h
    #include "camera.h"
    class cameraSettings :public QWidget
    {
    Q_OBJECT
    public :
    cameraSettings ();
    camera *cam;
    };
     
    //camera.h
    #include "cameraSettings.h"
    class camera 
    {
    public :
    camera();
    cameraSettings *gui;
    };
    de cette façon, une fois les classes créées, je fais le lien les objets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    camera *cameraS = new camera();
    cameraSettings *displayS = new cameraSettings();
     
    cameraS->gui = &displayS;
    displayS->cam = &cam;
    et ...... ca marche!

    par contre là où ça ne marche plus c'est quand il y a plusieurs cameras : chaque camera étant controlées par un couple camera/cameraSettings, je dois donc créer autant de couple qu'il y a de caméras. J'utilise donc des tableaux d'objets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //les headers des deux classes ne changent pas.
    camera *cameraS[nbCamera];
    cameraSettings *displayS[nbCamera];
    for (int i = 0; i < nbCamera ; ++i)
    {
    	cameraS[i]->gui = displayS[i];
    	displayS[i]->cam = cameraS[i];
    }
    tout compile correctement, mais le programme plante dès que l'une des classes utilise l'autre.... et évidement je ne sais pas comment faire... donc help si je puis me permettre.

    Merci d'avance!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 154
    Points : 12 266
    Points
    12 266
    Par défaut
    C'est pas beau comme code mais bon, on n'est pas là pour ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    camera *cameraS[nbCamera];
    cameraSettings *displayS[nbCamera];
    for (int i = 0; i < nbCamera ; ++i)
    {
    	cameraS[i] = new camera();
    	displayS[i] = new cameraSettings();
    	cameraS[i]->gui = displayS[i];
    	displayS[i]->cam = cameraS[i];
    }
    C'est juste pour la forme car, entre autre, la gestion mémoire est pourrie.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    merci pour ta réponse.
    j'ai rajouté les lignes mais le programme plante toujours.
    sinon je me doute que cette méthode est bancale mais je n'en vois pas d'autre, pour éviter de mélanger mes caméras et mes boutons...
    est-ce que tu pourrais m'indiquer une autre manière de faire??

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    A mon avis, il pensait entre autres aux pointeurs nus : Présentation des pointeurs intelligents en C++ (de Loïc Joly) et Les pointeurs intelligents de Qt de Thiago Macieira et Harald Fernengel, traduction Thibaut Cuvelier).
    Au passage tu devrais regarder les conteneurs STL.

    Ensuite, juste avec le nom de tes classes, je comprend que cameraSettings appartiennent à camera, mais je ne comprend pas trop pourquoi camera appartient à cameraSettings ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    merci je me documente de ce pas.

    sinon par rapport au nom, ils ne suivent aucun protocole, ils reflètent juste la fonction de la classe.
    d'autre part camera doit connaitre cameraSettings car les caméras revoient parfois des informations utile pour l'utilisateur que j'aimerai pouvoirafficher dans cameraSettings.
    J'espère avoir répondu correctement à ta question

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 154
    Points : 12 266
    Points
    12 266
    Par défaut
    j'ai rajouté les lignes mais le programme plante toujours.
    Quelle ligne ?
    Quel type d'erreur ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    j'ai rajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cameraS[i] = new camera();
    	displayS[i] = new cameraSettings();
    quand au type d'erreur je sais pas : le compilateur ne dit rien mais à l'éxécution le programme plante à cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //notification est un QTextEdit de cameraSettings
    gui->notification->append ("initialisation réussie");

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 154
    Points : 12 266
    Points
    12 266
    Par défaut
    Là, faudrait voir du côté des spécialistes de Qt.
    Désolé.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    ok merci!

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    Bon certes le codes est moche, la mémoire n'ets pas gérée etc etc
    Mais le problème semble venir de Qt ou moins de QTextedit.

    Je reformule donc le problème :

    j'ai créé une classe camera permettant d'intéragir avec une vrai caméra. à coté j'ai créé un QWidget cameraSettings permettant à l'utilisateur d'entrer les paramètres de fonctionnement de la caméra. Il est donc nécessaire que ces deux classes puissent "communiquer" entre elles et dans les deux sens. Pour cela les deux classes sont imbriquées (mal je sais...) comme décrit dans mon premier post et cela semble marcher. J'arrive en effet à utiliser/modifier les variables publiques d'une classe depuis l'autre.
    Par contre le programme plante (à l'éxécution) dès que la classe caméra veut accéder aux widgets de cameraSettings

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //camera.cpp
    // gui pointe vers une classe cameraSettings. il est déclarée dans camera.h
    //notification est un QTextEdit de cameraSettings
    gui->notification->append ("initialisation réussie");
    si vous avez ne serais-ce qu'un indice de ce qui peut se passer, j'en serais grandement reconaissant.

    merci d'avance

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut
    Citation Envoyé par Zhitoune Voir le message
    si vous avez ne serais-ce qu'un indice de ce qui peut se passer, j'en serais grandement reconaissant.
    Y as pas assez de code ou d'explication pour bien comprendre le problème.
    Déjà, pourquoi ces deux doivent se connaître???

    As tu utiliser un debuggeur pour voir ou ca bug?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    le but du projet est de réaliser un programme de contrôle de caméra (réglages, affichage, traitement des images etc), pour cela, plutôt que de tout coder dans une seule classe, je préfère en créer plusieurs ( une pour les réglages, une pour la caméra , une pour l'affichage etc etc) qui peuvent interagir entre elles. Là où tou se complique (pour moi), c'est que je ne sais pas à l'avance combien de caméra l'utilisateur choisira d'utiliser. j'ai donc choisi d'utiliser des tableaux (1 par classes) d'objets alloué dynamiquement dont la taille dépend du nombre de caméra connectées, avec comme contrainte qu'une classe d'indice i ne peut communiquer qu'avec les classes de même indice dans leur tableau respectif afin d'éviter tout échanges entre classes n'appartenant pas à la même caméra.

    j'ai donc défini les classes suivantes (c'est moches mais c'est qu'un début)
    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
    //cameraSettings.h 
    //classe de réglages des paramètres d'acquisition
    #include "camera.h"
    #include <QTextEdit>
     
    class cameraSettings :public QWidget
    {
    Q_OBJECT
    public :
    cameraSettings ();
    camera *cam;
    QTestEdit *console;
    unsigned int testErreur
    };
     
     
    //camera.h
    // classe définissant les fonctions de contrôle de la caméra
    #include "cameraSettings.h"
    class camera 
    {
    public :
    camera();
    cameraSettings *gui;
    void initializeCamera();
    unsigned int erreur
    };
     
    //camera.cpp
    camera::camera();
    void initializeCamera (){
           QString texte;
           erreur = initialize();
           gui->console->append (texte.setNum(erreur));// plante
           gui->testErreur = erreur; //marche;
    }
    et les classes sont imbriquées juste après leur contruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    camera *cameraS[nbCamera];
    cameraSettings *displayS[nbCamera];
    for (int i = 0; i < nbCamera ; ++i)
    {
    	cameraS[i]->gui = displayS[i];
    	displayS[i]->cam = cameraS[i];
            layout->addWidget(displayS[i];
            cameraS[i]->initializeCamera();
    }
    Ici théoriquement je devrais voir afficher dans chaque console le message d'erreur renvoyé par la caméra après son initialisation, mais le programme plante à son éxécution à ce niveau.
    Par contre, l'assignation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gui->testErreur = erreur;
    marche???!!

    Si vous avez des idées je suis preneur!

    merci d'avance!

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    ça y est c'est réglé....
    en fait l'erreur était trés bête....

    la fonction d'initialisation voulait utiliser console (QtexteEdit) , mais celui-ci était créé uniquement à la ligne suivante.....
    Donc ..... désolé.... et merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche de points communs entre objets
    Par pysnoo dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 24/04/2009, 14h39
  2. Communication entre objets via .NET Remoting
    Par JBidouille dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/05/2007, 22h52
  3. Communication entre objet via "Parent" ?
    Par starkson dans le forum Windows Forms
    Réponses: 11
    Dernier message: 17/02/2007, 18h22
  4. [Observateur] pattern publish/subscribe : communication entre objets
    Par mik-at dans le forum Design Patterns
    Réponses: 6
    Dernier message: 04/09/2006, 13h07
  5. Communication entre objet
    Par Nasky dans le forum Langage
    Réponses: 1
    Dernier message: 27/05/2006, 21h13

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