Gérer le clic droit

QPushButton est incapable de gérer le clic droit, il faut donc créer un nouvel objet et implémenter celui-ci.

  • Ajouter dans le projet un fichier qpushbuttonplus.h et qpushbuttonplus.cpp qui contiendront l'entête et le code source de cet objet.
  • modifier alternativement ces deux fichiers

qpushbuttonplus.h

#ifndef QPUSHBUTTONPLUS_H

#define QPUSHBUTTONPLUS_H

#include <QPushButton>


class QPushButtonPlus : public QPushButton

{

    Q_OBJECT

public:

    explicit QPushButtonPlus(QWidget *parent = 0);



signals:

    void rightClicked();

    void leftClicked();



private slots:

    void mousePressEvent(QMouseEvent *event);


private:


};

#endif // QPUSHBUTTONPLUS_H

Ce nouveau bouton émettra deux signaux selon que l'on clique à gauche ou à droite.

mousePressEvent permet de générer les signaux.

qpushbutton.ccp

#include "qpushbuttonplus.h"

#include <QMouseEvent>


QPushButtonPlus::QPushButtonPlus(QWidget *parent) :

    QPushButton(parent)

{


}


//****************************************************************************************************

void QPushButtonPlus::mousePressEvent(QMouseEvent *event)

{


    if(event->button() == Qt::RightButton){


        emit rightClicked();

    }

   if(event->button() == Qt::LeftButton){


            emit leftClicked();

        }


}

Utilisation dans le code de l'application

  • Ajouter dans l'entête du programme principal l'inclusion de qpushbuttonplus.h

#include "qpushbuttonplus.h"

  • Ajouter dans l'entête du programme principal les deux slots qui géreront les clics souris

public slots:

   void boutonclicGauche();

   void boutonClicDroit();

  • Déclarer le bouton dans la partie privée ou publique :

private :

QPushButtonPlus *monBouton;

  • Dans le code source (.cpp) du programme, créer le bouton dans le constructeur

 monBouton = new QPushButtonPlus(this);//ajoute le bouton dans la classe Mainwindow (spécifié par this)

  • Créer les connexions vers les slots:

                    QObject::connect(monBouton, SIGNAL(leftClicked()), this, SLOT(boutonClicGauche() ));

                    QObject::connect(monBoutons, SIGNAL(rightClicked()), this, SLOT(boutonClicDroit() ));

créer les void boutonClicgauche() et boutonClicDroit()


Remarque :

Dans le cas de l'utilisation d'un tableau de bouton avec QSignalMapper, il faudra deux variables signalMapper : pour le clic gauche et pour le clic droit.