我目前在扫雷游戏中遇到QPushButton
右键点击事件的问题。根据我的理解,如果我想为QPushButton
提供正确的点击事件,我必须做这样的事情:
在Buttons Class
:
class Buttons : public QPushButton
{
Q_OBJECT
public:
Buttons(QWidget *parent = Q_NULLPTR);
signals:
void btnRightClicked();
private slots:
void mousePressEvent(QMouseEvent *e) {
if(e->button() == Qt::RightButton) {
emit btnRightClicked();
}
}
};
然后在mainwindow.cpp
中创建一个这样的对象:
Buttons *mButtons = new Buttons(this);
并将btnRightClick signal
与slot
中的MainWindow Class
连接起来:
connect(mButtons, &Buttons::btnRightClicked, this, &MainWindow::onRightClicked);
这很有效,但由于它是一个扫雷游戏,我需要很多按钮。我想知道每次我需要一个有正确点击事件的按钮时,我是否需要像上面那样创建一个新对象?
例如,如果我想要64 QPushButtons
,我是否必须像这样创建64个对象?
for(int i = 0; i < 8; i++) {
for(int j = 0; j < 8; j++) {
Buttons *mButton = new Buttons(mCentralWidget);
mGridLayout->addWidget(mButton, i * 8, j);
connect(mButton, &Buttons::btnRightClicked, this, &MainWindow::onRightClicked);
}
}
对我来说,创造这么多物体可能听起来有点疯狂。有没有办法只创建一个包含许多QPushButtons
具有右键单击事件的对象?
请允许我提出另一个问题,即使我必须创建这么多对象,每次单击其中一个时,该对象应该隐藏或消失。我试过这个:
connect(mButton, &Buttons::clicked, mButton, &Buttons::hide);
不能正常工作。
希望我能清楚地解释我的问题。那么我该如何解决这些问题呢?或者是否有任何关于在扫雷游戏中处理右键事件的建议?
任何建议将不胜感激,谢谢。