Qt右键点击QPushButton

Kho*_*osi 7 qt right-click qpushbutton

我正在使用Qt Creator为一个中型游戏创建一个gui.如何知道点击右键单击QpushButton?在游戏中的标志.换句话说,哪个信号用于右键单击?

Md.*_*que 18

mousePressEvent插槽中使用过滤器创建自己的按钮.

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
Run Code Online (Sandbox Code Playgroud)

qrightclickbutton.cpp

#include "qrightclickbutton.h"

QRightClickButton::QRightClickButton(QWidget *parent) :
    QPushButton(parent)
{
}

void QRightClickButton::mousePressEvent(QMouseEvent *e)
{
    if(e->button()==Qt::RightButton)
        emit rightClicked();
}
Run Code Online (Sandbox Code Playgroud)

现在连接就像这样

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

在MainWindow.cpp中创建一个插槽.

void MainWindow::onRightClicked()
{
    qDebug() << "User right clicked me";
}
Run Code Online (Sandbox Code Playgroud)

这个对我有用!

  • 如果有人想 connect() 到通用 clicked() 信号和自定义 rightClicked() 信号 - 有必要在重写 `mousePressEvent(QMouseEvent *e) 的末尾调用 `QPushButton::mousePressEvent(e);` ` (2认同)

dte*_*ech 6

我认为QPushButton是内部实现的,只能听左鼠标点击.但是你可以轻松地扩展QPushButton并重新实现让我们说鼠标释放事件并按下鼠标右键来做你的事情,例如发出自定义rightClicked()信号,例如:

signals:
    void rightClicked();

protected:
    void mouseReleaseEvent(QMouseEvent *e) {
        if (e->button() == Qt::RightButton) emit rightClicked();
        else if (e->button() == Qt::LeftButton) emit clicked();
    }
Run Code Online (Sandbox Code Playgroud)

...或者您可以创建单击信号的重载,该信号转发mouseEvent指针,以便您可以在按钮外执行相同的检查.

signals:
    void clicked(QMouseEvent *);

protected:
    void mouseReleaseEvent(QMouseEvent *e) {
        emit clicked(e);
    }
Run Code Online (Sandbox Code Playgroud)

然后,您在连接按钮clicked(QMouseEvent *)信号的插槽中进行检查,然后进行相应操作.