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)
这个对我有用!
我认为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 *)信号的插槽中进行检查,然后进行相应操作.