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
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 #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
Ensuite il y a ma QmainWindow mais j'ai juste ajouté QMousePressEvent qui détecte mon clic.
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) { }
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 ?
Partager