如何在点击时更新2D标签数组中的元素?

时间:2019-04-22 18:58:32

标签: c++ qt user-interface

我正在尝试使用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新手,在我的问题上找不到任何帮助。预先谢谢你。

0 个答案:

没有答案