我正在使用Qt Creator为mineseeper游戏创建一个gui。 我怎样才能知道用右键单击的QpushButton?为游戏中的国旗。 换句话说,哪个信号用于右击?Qt rightclick QPushButton
回答
用筛选器创建您自己的按钮,位于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
qrightclickbutton.cpp
#include "qrightclickbutton.h"
QRightClickButton::QRightClickButton(QWidget *parent) :
QPushButton(parent)
{
}
void QRightClickButton::mousePressEvent(QMouseEvent *e)
{
if(e->button()==Qt::RightButton)
emit rightClicked();
}
现在象这样连接
QRightClickButton *button = new QRightClickButton(this);
ui->gridLayout->addWidget(button);
connect(button, SIGNAL(rightClicked()), this, SLOT(onRightClicked()));
创建MainWindow.cpp插槽。
void MainWindow::onRightClicked()
{
qDebug() << "User right clicked me";
}
它适合我!
如果有人想连接()到通用clicked()信号和自定义rightClicked()信号 - 有必要在重载的'mousePressEvent(QMouseEvent * e)末尾调用'QPushButton :: mousePressEvent(e) )' – Krzysiek 2016-04-24 15:51:51
我认为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();
}
...或者你可以创建一个转发的MouseEvent指针,以便你可以做的按钮之外相同的检查被点击的信号过载。
signals:
void clicked(QMouseEvent *);
protected:
void mouseReleaseEvent(QMouseEvent *e) {
emit clicked(e);
}
然后,你做你的按钮的clicked(QMouseEvent *)
信号连接并进行相应处理槽的检查。
我正在使用'QPushButton',并且没有'button()'。我该怎么办? – KhoC 2013-03-27 12:40:10
@KhoC什么? 'button()'是'QMouseEvent'的一个方法。 – cmannett85 2013-03-27 12:58:08
所以我不知道如何使用'mouseReleaseEvent'。为什么在'mouseReleaseEvent'中调用'rightClicked()'? – KhoC 2013-03-27 13:01:28
我只是写了这个小帮手适配器作任何现有按钮右键点击,不需要它的子类:
class CRightClickEnabler : public QObject
{
public:
CRightClickEnabler(QAbstractButton * button): QObject(button), _button(button) {
button->installEventFilter(this);
};
protected:
inline bool eventFilter(QObject *watched, QEvent *event) override {
if (event->type() == QEvent::MouseButtonPress)
{
auto mouseEvent = (QMouseEvent*)event;
if (mouseEvent->button() == Qt::RightButton)
_button->click();
}
return false;
}
private:
QAbstractButton* _button;
};
用法:
connect(ui->pushButton, &QPushButton::clicked, [](){qDebug() << "Button clicked";});
new CRightClickEnabler(ui->pushButton);
从现在起,clicked
信号将通过右键单击以及左键单击来触发。没有必要删除这个对象 - 它使用ui->pushButton
作为父对象,并且在父对象被销毁时将被Qt自动删除。
很显然,如果需要,您可以编写2行代码(字面上)来声明新信号,并在右击时发出该信号,而不是clicked
。
- 1. Qt继承QSpinBox和QPushButton
- 2. Qt的QPushbutton:悬停不工作
- 3. 用于QPushButton的Qt背景图像
- 4. (Qt C++)QPushButton setIcon()不起作用
- 5. Qt自定义QPushButton点击信号
- 6. QPushbutton settext在QT中的问题?
- 7. QPushButton文本适合Qt中的按钮
- 8. Qt设计器添加链接到QPushButton
- 9. QT - 获取所有QPushButton的列表
- 10. Qt OpenGL GUI:添加和撤消Qpushbutton
- 11. 在Qt的Qpushbutton的Elide文本Symbian C++
- 12. Qt QPushbutton图标在文本下
- 13. Qt - 获取QPushButton图标名称
- 14. Qt处理QPushButton Autorepeat()与isAutoRepeat()的行为
- 15. 链路QPushButton宽度到另一个QPushButton
- 16. QPushButton主Gui
- 17. RightClick CellTable标题
- 18. Qt:Qlabel和QPushButton QVBoxLayout
- 19. Qt RightClick QListWidget打开上下文菜单并删除项目
- 20. Qt中的rightclick事件来打开上下文菜单
- 21. 翻译QPushButton
- 22. 发布WPF RightClick MouseBinding?
- 23. QPushButton不显示
- 24. QPushButton和快捷
- 25. 右键点击QPushButton
- 26. QPushButton图形教程
- 27. 用CSS设计QPushButton?
- 28. 与QPushButton
- 29. ListView上的RightClick菜单UWP
- 30. 如何在qt中动画QPushButton的背景颜色?
您可能需要重写'event()'并自己发出信号。 – rainer 2013-03-27 12:15:16
为什么有人-1这个问题?是的,可能会有更多的努力,但问题是好的。感谢穆罕默德提供了一个很好的答案。 – zeFree 2013-04-09 22:44:53