Bonjour,
Je suis actuellement en train de coder (pour simplifier) une visionneuse d'image comportant:
- un QMainWindow dans lequel j'ai 2 QWidget se composant chacune d'une QGraphicsScene, pour afficher 1 QGraphicsItem (une image) dans chaque scene.
L'affichage des images marche. Aucune erreur de compilation.
Mon but est de réupérer dans ma QMainWindow un evenement du QGraphicsItem me permettant de récupérer les coordonnées de la souris dans l'item.
Tout d'abord ma classe ImageGPS qui hérite de QGraphicsItem et QObject pour gérer les signaux.
Ensuite ma classe MyMainWindow heritant de QMainWindow dans lequel j'essaye de récupérer le signal émis, plus précisement la fonction qui est censée connect les ImageGPS aux slots.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 //Fichier ImageGPS.h class ImageGPS : public QObject, public QGraphicsItem { Q_OBJECT public: ImageGPS(const QString, int x, int y); void charger(); QRectF boundingRect() const; QPainterPath shape() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); QString get_path(); QString get_name(); void ExtractName(); void mousePressEvent(QMouseEvent *event); void hoveMoveEvent(QGraphicsSceneHoverEvent * event); signals: void SendCoord(QString str); void SendhoveMoveEvent(QGraphicsSceneHoverEvent * event); private: int x,y; QImage Image; QString Path; QString Name; }; //Fichier ImageGPS.cpp ... void ImageGPS::mousePressEvent(QMouseEvent *event) { qDebug() << "POUET\n"; //Jamais affiché //QGraphicsItem::mousePressEvent(event); QPointF pt = event->posF(); QString str = "X : "; str += pt.x(); str += " Y : "; str += pt.y(); emit this->SendCoord(str); } void ImageGPS::hoveMoveEvent(QGraphicsSceneHoverEvent * event) { qDebug() << "hoveMoveEvent\n"; // Jamais affiché /*QPointF pt = event->scenePos(); QString str = "X : "; str += pt.x(); str += " Y : "; str += pt.y(); emit this->SendCoord(str);*/ //QGraphicsItem::hoverMoveEvent(event); SendhoveMoveEvent(event); } ...
Vous remarquerez que j'ai aussi un QTreeWidget pour stocker le nom des images (et faire l'association de leur position, stockée dans un 2eme colonne cachée, dans le QVector.);
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 //Fichier MyMainWindow.h class MyMainWindow : public QMainWindow { Q_OBJECT public: MyMainWindow(); private slots: void addimage(); void ChargerScene(QTreeWidgetItem*,int); void RecupCoor(QString str); void RecupCoord(QGraphicsSceneHoverEvent*); private: MainWindow *Main; QMenuBar *Menu; QMenu* MenuFile; QTreeWidget *Tree; QSplitter *mh1Splitter; QSplitter *mh2Splitter; QVector<ImageGPS*> LImages; }; //Fichier MyMainWindow.cpp ... void MyMainWindow::addimage() { QStringList List = QFileDialog::getOpenFileNames(this, "Choisir un dossier", "/home","Images (*.png *.JPG *.jpg)"); int SizeInit = this->LImages.size(); for(int i = 0; i < List.size();++i) { this->LImages.push_back(new ImageGPS(List.at(i),0, 0)); connect(this->LImages[i], SIGNAL(SendCoord(QString)), this, SLOT(RecupCoor(QString))); connect(this->LImages[i], SIGNAL(SendhoveMoveEvent(QGraphicsSceneHoverEvent*)), this, SLOT(RecupCoord(QGraphicsSceneHoverEvent*))); } connect(this->LImages[0], SIGNAL(SendCoord(QString)), this, SLOT(RecupCoor(QString))); QList<QTreeWidgetItem *> items; int k = 0; for(int i = SizeInit; i < this->LImages.size();++i) { items.append(new QTreeWidgetItem(QStringList(this->LImages.at(i)->get_name()))); items[k]->setData(1, 0, i); ++k; } Tree->insertTopLevelItems(0, items); Tree->sortByColumn(1,Qt::AscendingOrder); }...
Donc la question est: Pourquoi les evenements des objects ImageGPS ne sont-ils pas déclenchés, et donc les signaux émis?
Merci![]()
Partager