qtright-clickqpushbutton

Qt rightclick QPushButton


I'm using Qt Creator to create a gui for a mineseeper game. How can I know a QpushButton clicked with rightclick? for flag in the game. In other word, which signal used for rightclick?


Solution

  • Create your own button with filter at mousePressEvent slot.

    qrightclickbutton.h

    #ifndef QRIGHTCLICKBUTTON_H
    #define QRIGHTCLICKBUTTON_H
    
    #include <QPushButton>
    #include <QMouseEvent>
    
    class QRightClickButton : public QPushButton
    {
        Q_OBJECT
    
    public:
        explicit QRightClickButton(QWidget *parent = 0);
    
    private slots:
        void mousePressEvent(QMouseEvent *e);
    
    signals:
        void rightClicked();
    
    public slots:
    
    };
    
    #endif // QRIGHTCLICKBUTTON_H
    

    qrightclickbutton.cpp

    #include "qrightclickbutton.h"
    
    QRightClickButton::QRightClickButton(QWidget *parent) :
        QPushButton(parent)
    {
    }
    
    void QRightClickButton::mousePressEvent(QMouseEvent *e)
    {
        if(e->button()==Qt::RightButton)
            emit rightClicked();
        mousePressEvent(QMouseEvent *e)
    }
    

    Now connect like this

    QRightClickButton *button = new QRightClickButton(this);
    ui->gridLayout->addWidget(button);
    connect(button, SIGNAL(rightClicked()), this, SLOT(onRightClicked()));
    

    Create a slot in MainWindow.cpp.

    void MainWindow::onRightClicked()
    {
        qDebug() << "User right clicked me";
    }
    

    It works for me!