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.

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

#include "qpushbuttonplus.h"

public slots:

  void boutonclicGauche();

  void boutonClicDroit();

private :

QPushButtonPlus *monBouton;

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

                   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.