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 :

Multi-héritage de QWidget


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut Multi-héritage de QWidget
    Salut à tous

    Je suis en train de faire un simulateur de comunications TCP IP.
    J'ai 2 programmes qui doivent communiquer, sachant que les deux sont à la fois client et serveur.

    J'ai créé des classes parents pour les méthodes de communication, la connection du client etc. Pour tout ça, je dois utiliser des slots, donc hériter de QWidget. Sauf que du coup, chaque programme hérite de ma classe Client et de la classe Server, qui héritent tous les deux de QWidget.

    Donc ça plante inévitablement. Que faire ?

    Merci d'avance

    Edit: j'ai testé un héritage virtuel de QWidget, ça m'affiche un warning :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Classe *** inherits from two QObject suclasses Client*** et Server***, that is not supprted !

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Salut,

    D'abord, pour utiliser les signal/slot, il faut hériter de QObject. QWidget héritant de QObject, ça marche également. Autre chose à propos de l'héritage :

    Si B extends A, alors B a toutes les propriétés de A + celles propres à B.
    Si C extends B, alors C a toutes les propriétés de B, c'est à dire celles de A + celles propres à B, + celles propres à C.

    En gros, si Client hérite de QWidget, et que tu hérites de Client, tu hérites par la même de QWidget. Tu n'as pas besoin, je dirais même il ne faut pas, explicitement hériter de Client et QWidget.

    G.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    Salut, en fait pour mon premier programme (sachant que l'autre fonctionne de la même manière), ça donne ça:

    Classe_mere extends Client, Client extends QWidget
    Classe_mere extends Server, Server extends QWidget

    Donc je n'hérite pas Client et QWidget en même temps, je fais hériter Client et c'est Client qui hérite de QWidget. De cette manière, ça me sortait: "implicit declaration of QWidget::Show is ambiguous". Donc j'ai mis l'héritage de QWidget en virtuel, de cette manière les deux classes peuvent utiliser la méthode de leur côté (show sûrement doit être appelée automatiquement, je ne l'ai pas implémentée dans mon code). DOnc ce côté là, le problème semble résolu.

    Mais maintenant mon problème est lié à QObject comme tu le dis, avec le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Classe *** inherits from two QObject suclasses Client*** et Server***, that is not supported !
    En faisant hériter de QWidget on doit sûrement aussi hériter de QObject ou quelque chose de ce genre.. Ou alors c'est la macro Q_OBJECT utilisée pour les slots qui gène ?

    Je ne vois pas trop de solution :s

    Edit: si j'ai fais hériter de QWidget et pas de QObject, c'est que j'utilise les slots dans les classes Filles Client et Server, mais j'utilise des méthodes de QWidget pour une gui dans la classe mère :s

  4. #4
    Inactif  


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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour scheme

    En fait, comme souvent avec l'héritage multiple, tu as un problème de conception de tes classes à mon avis.
    L'héritage publique est une relation EST-UN (regarde sur la FAQ C++ et fais une recherche sur le forum C++ pour plus de détail). Hors, ici, ta classe "Classe_mere" n'est pas en même temps un serveur, un client et un widget : elle est en fait composée d'un serveur, d'un client et d'un widget, ces 3 éléments communiquant entre eux mais sont bien distinct. Tu dois donc utiliser le composition à la place de l'héritage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Classe_mere
    {
       QTcpServer* serveur;
       QTcpSocket* client;
       QWidget* widget;
    }
    Et tu utilises les signaux et slots pour la communication entre les 3 éléments.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut
    Salut,

    Je rajouterais que la documentation de Qt dis que l'héritage multiple entre plusieurs QOject est impossible (a cause du moc).

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    Merci à vous deux, il faut effectivement que je revois la conception de mes classes

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

Discussions similaires

  1. Multi héritage et surcharge
    Par rs1977 dans le forum C++
    Réponses: 7
    Dernier message: 01/05/2012, 21h35
  2. [2.x] Multi-héritage doctrine 2
    Par rafleboss dans le forum Symfony
    Réponses: 3
    Dernier message: 18/01/2012, 13h48
  3. Problème d'héritage de QWidget
    Par squallmrs dans le forum Qt
    Réponses: 3
    Dernier message: 11/10/2010, 02h38
  4. Multi héritage Qt -> multi héritage de QWidget ?
    Par gassi64 dans le forum Débuter
    Réponses: 2
    Dernier message: 24/07/2009, 11h33
  5. [DC] faux multi héritage
    Par pline dans le forum Diagrammes de Classes
    Réponses: 10
    Dernier message: 26/02/2008, 10h05

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