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.