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 :

Dialogue entre deux classes de fenêtres

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Dialogue entre deux classes de fenêtres
    Bonjour tout le monde,

    J'ai un problème concernant l'affichage d'un widget dans une fenetrea déjà ouverte a partir d'un bouton d'une fenetreb.

    je peux pas vous donner le code cette fois car c'est très long mais je vais vous expliquer ce que je fait. Je crée un slot dans la classe de la fenetreb dont le prototype est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void fenetrea::misea()
    {
        //...
    }
    Ce que j'ai trouvé logique car je vais utilisé des objets de la classe fenetrea en cliquant sur un bouton de la classe fenetreb donc je dois mettre mon slot dans la classe fenetreb mais en écrivant derrière le nom du slot fenetrea, mais ça n'a pas marché malheureusement.

    Je vous prie de m'aider et de me proposer une solution.

    Merci d'avance

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour

    Pour communiquer entre vos deux classes, vous avez plusieurs solutions. En voici deux :

    - Vous passer un pointeur vers votre fenêtre A dans le constructeur de B pour que B puisse appeler les fonctions membres de A

    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
    // dans "a.h"
    class A
    {
    public:
       void createB();
       void doSomething();
    };
     
    // dans "a.cpp"
    void A::createB()
    {
        B* b = new B(this); // tu transmets un pointeur vers A dans B
    }
     
    // dans "b.h"
    class B
    {
    public:
       B(A* a);
       void anotherFunction();
    private:
       A* m_a; // tu as besoin de garder un pointeur vers B
    };
     
    // dans "b.cpp"
    B::B(A* a) : m_a(a) // tu enregistres le pointeurs vers A
    {
    }
     
    void B::anotherFunction()
    {
        m_a->doSomething(); // tu peux appeler les fonctions de A
    }
    L'inconvénient majeur de cette approche est que si tu modifies la classe A (par exemple en renommant le fonction en "doAnotherSomething"), il faut alors modifier également toutes les autres classes, ce qui peut faire beaucoup sur de gros projet.

    - L'autre solution est d'utiliser les signaux et slots : tu crées un signal dans B et un slot dans A puis tu les connectes ensemble (c'est à dire que lorsque tu vas émettre le signal dans B, le slot de A sera exécuté) :

    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
    // dans "a.h"
    class A : public QObject // nécessaire pour les signaux/slots
    {
    public:
       void createB();
    public slots:
       void doSomething();
    };
     
    // dans "a.cpp"
    void A::createB()
    {
        B* b = new B(); // plus besoin de transmettre le pointeur vers A
        connect(b, SIGNAL(oneSignal()), this, SLOT(doSomething()));
               // tu connectes le signal et le slot
    }
     
    // dans "b.h"
    class B : public QObject // nécessaire pour les signaux/slots
    {
    public:
       void anotherFunction();
    signals:
       void oneSignal();
    };
     
    // dans "b.cpp"
    void B::anotherFunction()
    {
        emit oneSignal(); // tu émet un signal
    }
    N'hésite pas à poser d'autres questions si le code n'est pas clair.

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    C'est très bien expliqué merci beaucoup

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/10/2009, 22h48
  2. Association entre deux classes en dotnet
    Par lulu3111 dans le forum C++/CLI
    Réponses: 4
    Dernier message: 18/04/2007, 21h15
  3. [WIn32 et .Net] Dialogue entre deux applications
    Par jambono dans le forum C++/CLI
    Réponses: 4
    Dernier message: 23/10/2006, 17h25
  4. Passage d'un objet entre deux classes
    Par ericlemoustic dans le forum Langage
    Réponses: 2
    Dernier message: 13/10/2006, 09h58
  5. Réponses: 5
    Dernier message: 17/08/2005, 12h40

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