我正在尝试使用QT为Gomoku游戏设置GUI。到目前为止,我设法创建了一个二维单元格数组,并在所有单元格上附加了一个带有空单元格的图像。现在,我正在尝试通过单击鼠标来更新单元格,但无法弄清楚如何正确执行此操作。我无法弄清楚如何发送包含要更改的单元格索引的信号(cells [x] [y])。
我试图将一些信号和插槽放在一起,但是我无法使其工作。
这是我的GameCell.h:
class GameCell : public QLabel
{
public:
enum State {Unused, White, Black};
GameCell(QWidget *parent = nullptr);
State getState() const { return currentState; }
void setState(State newState);
private:
State currentState;
void updateCell();
};
这是GameCell.cpp:
#include "gamecell.h"
GameCell::GameCell(QWidget *parent) : QLabel (parent), currentState(Unused)
{
updateCell();
}
void GameCell::setState(State newState) {
if (currentState != newState) {
currentState = newState;
updateCell();
}
}
void GameCell::updateCell(){
QImage cellImage;
switch (currentState) {
case Unused:
cellImage.load("emptyCell.png");
break;
case White:
cellImage.load("whiteCell.png");
break;
case Black:
cellImage.load("blackCell.png");
break;
}
this->setPixmap(QPixmap::fromImage(cellImage));
}
这是我在屏幕上存储单元格的方式:
GameMap::GameMap(QWidget *parent) : QWidget(parent)
{
layout = new QGridLayout (this);
for(int column = 0; column < Columns; column++)
for(int row = 0; row < Rows; row++) {
GameCell* cell = new GameCell(this);
cells[column][row] = cell;
layout->addWidget(cell, row, column);
}
}
这就是我在Game类中显示它们的方式:
Game::Game(QWidget *parent) : QDialog (parent)
{
board = new GameMap (this);
layout = new QHBoxLayout (this);
layout->addWidget(board);
setLayout(layout);
setWindowTitle(tr("Gomoku"));
}
我希望您能以一种我应该尝试实现的方法来帮助我。我是QT新手,在我的问题上找不到任何帮助。预先谢谢你。