Я пытаюсь настроить графический интерфейс для игры Gomoku, используя QT. До сих пор мне удалось создать двумерный массив ячеек, и я прикрепил к ним изображение с пустой ячейкой. Сейчас я пытаюсь обновить ячейку по щелчку мыши, но не могу понять, как это сделать правильно. Я не могу понять, как отправить сигнал, содержащий индекс ячейки, которую я хочу изменить (ячейки [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 и не могу найти помощь по моей проблеме. Заранее спасибо.