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 attributs d'une autre classe

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 72
    Points : 78
    Points
    78
    Par défaut Accès aux attributs d'une autre classe
    Bonjout à tous,
    j'ai crée une application dont sa structure est la suivante:
    Classe nomée "Design" hérite de QWidget,dans cette classe j'ai crée une instance d'une classe nomée GraphicsView qui hérite de QGraphicsView et dans cette dernière j'ai crée une instance de GraphicsScene qui hérite de QGraphicsScene.
    Dans la classe GraphicsScene j'ai besoin de modifier la méthode QGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *) pour gérer le mouvement du curseur dont son effet est de modifier l'attribut lineEdit (QLineEdit *) de la classe Design, mais je ne trouve pas comment.
    j'ai essai d'utiliser : this->parent()->parent()->lineEdit->setText("blabla"); mais ça marche pas, j'ai l'erreur suivant: 'class QObject' has no member named 'lineEdit'
    Est ce que quelqu'un peut m'aider

  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

    La fonction parent() renvoie un QObject* donc le compilateur ne sait pas que c'est en fait la classe Design, qui contient une variable membre lineEdit.
    Il faut donc faire autrement (c'est à dire, à mon avis, que tu as de problème dans la conception objet de ton code...)

    Si tu ne veux pas corriger ce problème de conception pour le moment (qui se retournera tôt ou tard contre toi), tu peux utiliser un cast :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Design* d = qobject_cast<Design*>(this->parent()->parent());
    d->lineEdit->setText("blabla");
    Bon courage

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 72
    Points : 78
    Points
    78
    Par défaut
    Merci pour votre réponse ça marche mais j'ai un problème c'est que lorsque je réimplémente la méthode mouseMoveEvent dans GraphicsView ça marche bien par contre ça marche pas lorsque je la réimplémente dans GraphicsScene en plus mon application se plante lorsque je introduit le curseur dans mon QGraphicsView :

  4. #4
    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
    Erreur de ma part, il faut tester le pointeur après le cast
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Design* d = qobject_cast<Design*>(this->parent()->parent());
    if (d)
       d->lineEdit->setText("blabla");
    Si ça ne fonctionne pas, c'est que le cast n'est pas possible (donc erreur d'architecture quelque part)

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 72
    Points : 78
    Points
    78
    Par défaut
    même avec if mon application se bloque au moment où j'introduit le curseur dans mon QGraphicsView.
    Ce que ne comprend pas c'est pourquoi ça fonctionne au niveau de ma classe GraphicsView qui hérite de QGraphicsView et non avec GraphicsScene qui hérite de QGraphicsScene?

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 72
    Points : 78
    Points
    78
    Par défaut
    Bonjour,
    mon problème est reglé, c'est juste en ajoutant QGraphicsSenen(parent) dans ma classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GraphicsScene::GraphicsScene(QWidget *parent):QGraphicsScene(parent)
    mais le problème que j'ai rencontré c'est au niveau de la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    GraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
    {
    int x = event->pos().x();
    int y = event->pos().y();
    Design* des = qobject_cast<Design*>(this->parent()->parent());
    des->lineEdit->setText(QString::number(x));
    des->lineEdit_2->setText(QString::number(y));
    }
    je récupère toujours (0,0) comme valeur de x et y

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

Discussions similaires

  1. [Débutant] Accès aux attributs d'une classe
    Par stracoma dans le forum VB.NET
    Réponses: 9
    Dernier message: 17/05/2015, 22h10
  2. [PHP 5.3] Empêcher l'accés aux attributs d'une classe ?
    Par tintin72 dans le forum Langage
    Réponses: 1
    Dernier message: 20/08/2010, 14h58
  3. Accès aux attributs propres à une classe fille
    Par jamilya dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 24/12/2008, 15h06
  4. Acces aux composants d'une autre class
    Par Yann39 dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 13/01/2007, 22h16
  5. Accès aux attributs d'une balise HTML
    Par tatou42 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/02/2006, 14h01

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