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 :

QMousePressEvent et QGraphicsView


Sujet :

Qt

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 17
    Points : 10
    Points
    10
    Par défaut QMousePressEvent et QGraphicsView
    Bonjour,

    Je rencontre des difficultés à utiliser QMousePressEvent.

    J'ai réalisé une QMainWindow sur laquelle j'ai ajouté trois QGraphicsView. Chacun des trois QGraphicsView sont des QWidgets perso héritant de QGraphicsView.
    J'aimerais pouvoir, lorsque je clic sur une des view présent sur ma QMainWindows, detecter laquelle est. Pour se faire j'utilise QMousePressEvent mais j'ai du mal à comprendre comment l'implementer dans un widget perso.

    Voici mon code :

    .h du Widget héritant de QGraphicsView
    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
    21
    22
    23
    24
    25
    #ifndef VOIE1_H
    #define VOIE1_H
     
    #include <QWidget>
    #include <QObject>
    #include <QGraphicsScene>
    #include <QGraphicsView>
    #include <QMouseEvent>
    #include <QDebug>
     
    class Voie1 : public QGraphicsView
    {
        Q_OBJECT
     
    public:
        Voie1(QWidget* parent=0);
        QGraphicsView *vue_troisVoies;
        QGraphicsScene *scene_troisVoies;
        void mousePressEvent(QMouseEvent *event);
     
    signals:
        void cliqueVoies1();
    };
     
    #endif // VOIE1_H
    CPP du Widget héritant de QGraphicsView
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include "voie1.h"
    #include "fenprojet.h"
     
    Voie1::Voie1(QWidget* parent) : QGraphicsView(parent)
    {
    //-----------Animation Trois Voies------------------//
        scene_troisVoies = new QGraphicsScene(this);
        scene_troisVoies->setSceneRect(0,0,50,50);
     
        scene_troisVoies->addLine(QLineF(5, 4, 45, 4), QPen(Qt::black)); //ligne superieur
     
        scene_troisVoies->addLine(QLineF(5, 22, 14, 22), QPen(Qt::black)); //ligne horizontal inferieur gauche
        scene_troisVoies->addLine(QLineF(14, 22, 15, 23), QPen(Qt::black)); //ligne oblique inferieur gauche
        scene_troisVoies->addLine(QLineF(15, 23, 15, 45), QPen(Qt::black)); //ligne vertical inferieur gauche
     
        scene_troisVoies->addLine(QLineF(35, 45, 35, 23), QPen(Qt::black)); //ligne horizontal inferieur droit
        scene_troisVoies->addLine(QLineF(35, 23, 36, 22), QPen(Qt::black)); //ligne oblique inferieur droit
        scene_troisVoies->addLine(QLineF(36, 22, 45, 22), QPen(Qt::black)); //ligne vertical inferieur droit
     
        scene_troisVoies->addPolygon(QPolygonF(QVector<QPointF>()<<QPointF(43,7)<<QPointF(30,7)<<QPointF(26,8)<<QPointF(22,10)<<QPointF(21,11)<<QPointF(19,14)<<QPointF(18,18)<<QPointF(18,43)<<QPointF(19,44)<<QPointF(31,44)<<QPointF(32,43)<<QPointF(32,22)<<QPointF(33,20)<<QPointF(35,19)<<QPointF(43,19)<<QPointF(44,18)<<QPointF(44,8)), QPen(Qt::black),QColor(Qt::black));
     
     
        vue_troisVoies = new QGraphicsView(scene_troisVoies,this);
        vue_troisVoies->setFixedSize(60,60);
        //vue_troisVoies->setCacheMode(QGraphicsView::ScrollHandDrag);
    }
     
    void Voie1::mousePressEvent(QMouseEvent *event)
    {
     
    }
    Ensuite il y a ma QmainWindow mais j'ai juste ajouté QMousePressEvent qui détecte mon clic.

    Je pensais comparer dans le QMousePressEvent de ma QMainWindow la position de mon clic par rapport a la position de ma QGraphicsView mais je n'ai pas trouvé de méthode de la classe QGraphicsView compatible...

    Pourriez vous m'expliquez rapidement comment ca fonctionne et quelle est la solution la plus adaptée ?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 218 582
    Points
    218 582
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Peut être il vous sera plus simple d'utiliser QSignalMapper. Sinon, il faut bien songer à utiliser la position globale de la souris et de savoir si sa position est incluse dans le rectangle de tel ou tel widget.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Points : 725
    Points
    725
    Par défaut
    Dans l'exemple que j'ai vu c'est la scene et pas le viewer qui surcharge l'évènement.
    Conseil: utiliser QGraphicsScene comme classe de base pour Voie1, la classe QGraphicsView est juste une caméra. Construire la scène via une caméra n'est donc pas une bonne idée.


    Note1: Il n'y a à priori pas de signaux pour les events de la souris sur ces QObjects, donc les QSignalMapper (ou connect) ne servent à priori à rien.

    Note: je ne comprends pas l'existence de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QGraphicsView *vue_troisVoies;
    vu que la classe hérite de QGraphicsView.
    Raphchar.

Discussions similaires

  1. QGraphicsView afficher liste images miniatures
    Par mac&cheese dans le forum Qt
    Réponses: 9
    Dernier message: 06/01/2009, 20h21
  2. Réponses: 2
    Dernier message: 20/08/2008, 17h10
  3. Réponses: 1
    Dernier message: 14/08/2008, 22h43
  4. [QT4] QGraphicsView :: paintEvent
    Par DyoXynE dans le forum Qt
    Réponses: 3
    Dernier message: 08/08/2008, 16h20
  5. Positionnement dans un QGraphicsView
    Par mac&cheese dans le forum Qt
    Réponses: 6
    Dernier message: 23/04/2008, 21h42

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