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

Discussion :

Comment faire fonctionner MousePressEvent sur un QLabel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Par défaut Comment faire fonctionner MousePressEvent sur un QLabel
    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:
    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
    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
    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));
    }
    Dans la QDialog, le QLabel est nommé comme ca : "Points"
    Le mainwindow.cpp contient cette ligne pour afficher l'image dans le QLabel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    this->uiDial.Points->remplirLabel(QImage("Points.bmp"));
    this->uiDial.Points->adjustSize();
    Jusque qu'ici, tout va bien, l'image s'affiche.
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    protected:
        void MousePressEvent (QMouseEvent * event);
     
    signals:
        void cliqueImg ();
    et dans qlabelperso.cpp
    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();
    }
    dans le mainwindow.cpp, j'ai rajouté la connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    connect (this->uiDial.Points, SIGNAL(cliqueImg()), this, SLOT (actionAFChangeTri()));
    Vision d'ensemble de ma classe :
    .h :
    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
    .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
    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();
     
    }
    Résultat :
    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

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Bonjour,

    Tu ne nous as pas montré le plus important, ton slot actionAFChangeTri() (déclaration + définition) de mainwindow.cpp, qui est chargé si j'ai bien compris de changer la couleur.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Par défaut
    Tout à fait actionAFChangeTri() doit changer la couleur de l'icone.

    Dans mainwindow.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    privates slots:
        void actionAFChangeTri();
    et dans mainwindow.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
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
    [...]
        connect (uiDial.Points, SIGNAL(cliqueImg()), this, SLOT (actionAFChangeTri()));
    [...]
    }
     
     
    void actionAFChangeTri()
    {
        //Juste pour voir si le programme passe par la...
        std::cout << "par la ?" << std::endl;
    }
    La fonction actionAFChangeTri() ne fait rien pour l'instant (pas la peine que j'aille plus loin), mais juste m'indique si le programme fonctionne correctement, et je n'ai aucun affichage : que ce soit pour la MousePressEvent ou actionAFChangeTri.
    Je déduis donc qu'il y a un souci.

    Une idée ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Par défaut
    Petite erreur que je corrige pour la définition (sinon, le compilateur rale...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void MainWindow::actionAFChangeTri()
    {
        //juste pour voir si le programme passe par la...
        std::cout << "par la ?" << std::endl;
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 14
    Par défaut
    Je viens de trouver pourquoi ca ne fonctionnait pas.

    mousePressEvent(...) à la place de MousePressEvent(...)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire fonctionner JavaFX sur Ubuntu
    Par yaya125 dans le forum JavaFX
    Réponses: 4
    Dernier message: 10/06/2012, 15h00
  2. Comment faire fonctionner 2 TActionList sur le même formulaire?
    Par vg-matrix dans le forum Composants VCL
    Réponses: 1
    Dernier message: 30/08/2010, 14h30
  3. [Binding] Comment le faire fonctionner TwoWay sur une Collection<String> ?
    Par matdur dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 22/04/2009, 11h39
  4. Réponses: 2
    Dernier message: 11/11/2007, 00h55
  5. comment faire fonctionner l'exe sur une autre machine
    Par brian79 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/05/2004, 14h00

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