我目前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);
这是行不通的。
希望我能清楚地解释我的问题。那么我该如何解决这些问题呢?或者有什么关于在扫雷游戏中处理右键事件的建议吗?
任何建议将不胜感激,谢谢。