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 :

QGraphicsItem : pas d'appel à mousePressEvent()


Sujet :

Qt

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 99
    Points : 58
    Points
    58
    Par défaut QGraphicsItem : pas d'appel à mousePressEvent()
    Bonjour,

    J'essaie à l'aide d'un petit projet test de récupérer les événements dans un item de ma QGraphicsView.

    J'ai donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Widget::Widget(QWidget *parent) : QWidget(parent)
    {
        QGraphicsView *vue = new QGraphicsView(this);
        vue->setMouseTracking(true);
        vue->setFixedSize(800, 400);
     
        QGraphicsScene *scene = new QGraphicsScene();
        Ellipse *ellipse = new Ellipse(0, 0, 50, 50, 0, scene);
        scene->addItem(ellipse);
     
        vue->setScene(scene);
        vue->show();
    }
    Et un item Ellipse qui hérite de QGraphicsEllipseItem :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Ellipse::Ellipse(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent, QGraphicsScene *scene) : QGraphicsEllipseItem(x, y, w, h, parent, scene)
    {
        this->setFlag(QGraphicsItem::ItemIsSelectable);
    }
     
    void Ellipse::mousePressEvent(QGraphicsSceneMouseEvent *event)
    {
        this->setScale(5);
        this->prepareGeometryChange();
    }
    Là, pas de problème, ça marche!

    Maintenant, si je fais :

    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
    Ellipse::Ellipse(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent, QGraphicsScene *scene) : QGraphicsEllipseItem(parent, scene)
    {
        this->setFlag(QGraphicsItem::ItemIsSelectable);
    }
     
    void Ellipse::mousePressEvent(QGraphicsSceneMouseEvent *event)
    {
        this->setScale(5);
        this->prepareGeometryChange();
    }
     
    void Ellipse::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
    {
        painter->drawEllipse(QPoint(10,10), 50, 50);
    }
     
    QRectF Ellipse::boundingRect() const
    {
        return QRectF(QPointF(-40,-40), QPointF(60,60));
    }
    l'événement mousePressEvent n'est plus appelé. Ce qui pose un problème si je veux avoir mon item personnalisé tout en pouvant le sélectionner sans problème dans ma vue.

    Savez-vous pourquoi ça ne fonctionne plus ?

    Merci!

  2. #2
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Bonjour,

    À première vue, ç'aurait été un problème de boundingRect. Sauf que celui-ci est bien défini et je peux supposer que vous ne cliquez pas hors de la zone donnée (QRect entre (QPointF(-40,-40), QPointF(60,60)). Vu qu'il n'y a pas de mouseGrabber, l'item est effectivement censé récupérer l'évènement. Avez-vous tenté de placer des logs dans la fonction pour savoir si elle est réellement appelée ou non ? Ce pourrait tout simplement être un problème de rafraichissement qui ferait penser que ça ne fonctionne pas comme on le voudrait.

    De même, est-ce que la sélection se fait lors d'un clic ?

    Bonne continuation,
    Amnell.

Discussions similaires

  1. Coinitialize n'a pas été appelé
    Par nazimb dans le forum Bases de données
    Réponses: 6
    Dernier message: 20/04/2007, 16h39
  2. [struts-Validator] pas d'appel javascript
    Par Christophe P. dans le forum Struts 1
    Réponses: 1
    Dernier message: 28/09/2006, 15h41
  3. Réponses: 17
    Dernier message: 22/09/2006, 09h37
  4. classement en sql (enfin je ne sais pas comment appeler)
    Par shirya dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/09/2005, 09h29
  5. Pas d'appel à une fonction si mode Release
    Par Crisanar dans le forum C++
    Réponses: 8
    Dernier message: 17/09/2005, 05h54

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