Bonjour,
//Je préviens, je suis pas un caid en QtCreator//
But : J'aimerais qu'en cliquant sur une icône, cette icône change de couleur.
Je présente la situation. J'ai créé avec QtDesigner une QDialog (cette QDialog remplit certaines fonctionnalités) dans laquelle j'ai placé un QLabel dans un QWidget. Cette QLabel, je l'ai promu en QLabelPerso.
J'ai créé ma classe QMonLabel comme ca :
le qlabelperso.h:
et le qlabelperso.cpp:
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 #ifndef QLABELPERSO_H #define QLABELPERSO_H #include <QLabel> #include <QWidget> class QLabelPerso : public QLabel { Q_OBJECT; public: QLabelPerso(); QLabelPerso(QWidget* parent = 0); void remplirLabel (QImage img); }; #endif // QLABELPERSO_H
Dans la QDialog, le QLabel est nommé comme ca : "Points"
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 #include "qlabelperso.h" #include <iostream> QLabelPerso::QLabelPerso() { } QLabelPerso::QLabelPerso(QWidget* parent) : QLabel(parent) { } void QLabelPerso::remplirLabel(QImage img) { this->setPixmap(QPixmap::fromImage(img)); }
Le mainwindow.cpp contient cette ligne pour afficher l'image dans le QLabel
Jusque qu'ici, tout va bien, l'image s'affiche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 this->uiDial.Points->remplirLabel(QImage("Points.bmp")); this->uiDial.Points->adjustSize();
A présent, j'aimerais changer la couleur lors d'un clic souris sur ce label.
Pour cela, j'ai rajouté la méthode MousePressEvent qui emet un signal quand je clique avec la souris dans qlabelperso.h
et dans qlabelperso.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 protected: void MousePressEvent (QMouseEvent * event); signals: void cliqueImg ();
dans le mainwindow.cpp, j'ai rajouté la connexion :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void QLabelPerso::MousePressEvent (QMouseEvent * event) { //Affichage pour vérifier que l'evenement souris est percu std::cout << "emit cliqueImg" << std::endl; emit cliqueImg(); }
Vision d'ensemble de ma classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 connect (this->uiDial.Points, SIGNAL(cliqueImg()), this, SLOT (actionAFChangeTri()));
.h :
.cpp:
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 #ifndef QLABELPERSO_H #define QLABELPERSO_H #include <QLabel> #include <QWidget> class QLabelPerso : public QLabel { Q_OBJECT; public: QLabelPerso(); QLabelPerso(QWidget* parent = 0); void remplirLabel (QImage img); protected: void MousePressEvent (QMouseEvent * event); signals: void cliqueImg (); }; #endif // QLABELPERSO_H
Résultat :
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 #include "qlabelperso.h" #include <iostream> QLabelPerso::QLabelPerso() { } QLabelPerso::QLabelPerso(QWidget* parent) : QLabel(parent) { } void QLabelPerso::remplirLabel(QImage img) { this->setPixmap(QPixmap::fromImage(img)); } void QLabelPerso::MousePressEvent (QMouseEvent * event) { std::cout << "emit cliqueImg" << std::endl; emit cliqueImg(); }
Quand je clique sur mon label, il n'y a pas l'affichage montrant que je passe dans la fonction MousePressEvent.
Pourquoi ca ne fonctionne pas ?
Je vous remercie par avance si vous pouvez me dire si j'ai oublié quelque chose, ou si je me plante completement
Partager