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 :

Accès aux méthodes de la classe parente

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut Accès aux méthodes de la classe parente
    Hello,

    J'ai 2 classes, une classe parent, qui hérite de QWigdet ainsi qu'une classe enfant, qui, elle aussi hérite de QWidget.


    Au sein de la classe enfant, je peux accéder aux méthodes de la classe parent avec

    this.parent()...

    Bien entendu, je n'ai pas accès aux méthodes implémentées par mes soins, this.parent() donne un pointeur vers un type QWidget, et non pas vers un type MaClasseParent.

    Ma question :

    Comment puis-je accéder de façon élégante et simple, aux méthodes que j'ai moi-même implémentées dans la classe parent, à partir de la classe enfant.

    Faut-il tenter de caster ?

    Ici, le constructeur de la classe parent, l'enfant est GroupInGL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "glwidget.h"
     
    GLWidget::GLWidget(QWidget *parent)
        : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
    {
     
        //on cree la liste des elements
        listOfElement=new GroupInGL(this);
    Ici le constructeur de la classe enfant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "groupingl.h"
     
     
    GroupInGL::GroupInGL(QWidget *parent):
            QWidget(parent)
    {
     
        set_polygonMaking(false);
     
     
    }
    Un grand merci pour votre aide.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Alors pour corriger :
    - this est un pointeur, this->parent() donc.
    - parent() renvoie un QObject*, on gagne un static_cast en QWidget* en utilisant parentWidget()

    Sinon ça dépend de ta conception, si le parent d'un GroupInGL est forcément un GLWidget, pourquoi passer un QWidget* en paramètre du constructeur ? Si c'est pas forcément le cas, alors il faut caster. qobject_cast est fait pour ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    GroupInGL::GroupInGL(QWidget *parent):
            QWidget(parent)
    {
     
        set_polygonMaking(false);
     
        GLWidget* GLparent = qobject_cast<GLWidget*>(parent);
        if (GLparent) {
            // cast réussi, on a bien un GLWidget en parent donc on peut l'utiliser
        }
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut Accès aunx membres du parent.
    Hello Troudhyl,

    Je vais essayer cela.
    Merci pour ta prompte réponse !

    Le problème de dépendance cyclique survient, alors, apparement.

    GroupInGL doit être renseigné sur GLWidget est vice-versa !

    Tu as lâché un mot que je considère essentiel : CONCEPTION !

    "L'argent est le nerf de la guerre, le conception est le nerf du développement informatique"

    citation de ......inconnu...


    La question donc :

    L'utilisation (trop) fréquente du casting n'est-t-il pas un cygne d'une conception bancale?

    Aurais-tu une référence (bouquin ou article) qui traite la chose (conception) ?


    A+

    gilouu

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Pas de problème de dépendance cyclique, rappelle-toi que dans les .h tu ne fais que déclarer les classes (où il n'y a que des pointeurs ou références dans l'en-tête), et que dans le .cpp tu fais les inclusions.
    Donc dans glwidget.h tu n'inclus pas groupingl.h, tu déclares seulement class GroupInGL;.

    Concernant la conception, n'étant pas un grand théoricien je n'ai pas de lecture à te proposer, mais un autre devrait t'aider sans mal.

Discussions similaires

  1. Accès aux méthodes de la classe d'à côté
    Par rtg57 dans le forum Langage
    Réponses: 1
    Dernier message: 24/09/2010, 17h14
  2. [JSTL] Accès aux méthodes d'une classe
    Par libuma dans le forum Taglibs
    Réponses: 7
    Dernier message: 07/09/2010, 09h14
  3. Acces aux méthodes d'une Classe
    Par Sunchaser dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/08/2010, 21h51
  4. Problème d'accès aux méthodes d'une classe
    Par RR instinct dans le forum Langage
    Réponses: 5
    Dernier message: 26/06/2006, 14h51
  5. [TOMCAT] JSP problème d'accès aux méthodes d'une classes
    Par gunnm dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 22/05/2004, 14h02

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