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 :

[QGraphicsLineItem]Implémentation des fonctions événementielles virtuelles


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    554
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 554
    Par défaut [QGraphicsLineItem]Implémentation des fonctions événementielles virtuelles
    Bonjour à tous,

    J'aimerai pouvoir récupérer les événements hoverEnterEvent et hoverLeaveEvent d'un item d'une QGraphicsScene. Ces évènements sont des fonctions virtuelles protégées de la classe QGraphicsItem, il faut donc que je crée une classe dérivée de celle-ci. Le problème c'est que j'aimerai profité des outils fournit par QGraphicsLineItem, mais quand je dérive une classe de QGraphicsLineItem, les événements ne réagissent pas.

    Voici un bout du code :

    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
     
    class MyQGraphicsLineItem : public  QGraphicsLineItem
    {
        public:
            MyQGraphicsLineItem() : QGraphicsLineItem(){};
     
        protected:
            // Ces deux méthodes sont définies plus tard et on pour fonction de changer la position de l'objet (setPos())
            void hoverEnterEvent ( QGraphicsSceneHoverEvent * event );
            void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event );
    };
     
    // Plus loin dans une autre méthode
    MyQGraphicsLineItem *line_item1;
    line_item1 = (MyQGraphicsLineItem*)scene->addLine(QLineF(1,1, 10, 10));
    C'est peut-être le cast qui est mauvais. Quelle serait la solution pour la gestion de ces événements à votre avis ?

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 214
    Par défaut
    Qu'en est-il du corps de ces méthodes ? Les as-tu implémentés ? Si non, c'est un peu normal ! :p

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 67
    Par défaut
    je me demande si ce n'est pas le même problème que:
    http://www.developpez.net/forums/d69...lots-heritage/

    Essaye de rajouter le mot clé "virtual" devant les déclarations de tes évènements...

  4. #4
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Non, le moc n'est pas concerné dans ce problème, donc pas de soucis.

    Par contre, as-tu bien appelé "setAcceptsHoverEvents(true);" sur ton item ? Sans ça ne marche pas, et c'est false par défaut (dans un souci de performance).

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    554
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 554
    Par défaut
    J'ai essayé avec la fonction setAcceptsHoverEvents(true) mais ça ne change rien. Je pense qu'il y a une erreur au niveau de la création de l'item mais je ne sais pas comment le résoudre.
    Quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    line_item1 = (MyQGraphicsLineItem*)scene->addLine(QLineF(1,1, 10, 10));
    la fonction addLine me renvoi un QGraphicsLineItem et donc je le cast, mais je ne pense pas que ce soit valable. Le problème est que l'on appelle pas explicitement le constructeur du QGraphicsLineItem, comment puis-je faire à votre avis ?

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 67
    Par défaut
    Autre question bête. Est-il normal de ne pas retrouver la macro Q_OBJECT dans la déclaration de la classe?

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 27/01/2013, 15h25
  2. cacher l'implémentation des fonctions inline
    Par PyNub dans le forum Débuter
    Réponses: 27
    Dernier message: 28/08/2012, 19h28
  3. [XQUERY] implémenter des fonctions
    Par fatjoe dans le forum XQUERY/SGBD
    Réponses: 3
    Dernier message: 14/04/2010, 12h57
  4. Classe Java qui implémente des fonctions oracles
    Par kamacho25 dans le forum Outils
    Réponses: 0
    Dernier message: 28/09/2007, 14h46
  5. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19

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