1

我正在制作一个棋盘游戏,我需要在我的 gui 中显示一个 15 x 15 数组。我决定使用包含数组一个元素的单个标签。这意味着我确实有很多标签。我给每个标签命名为“tile_0_0”,第一个 0 是行,第二个 0 是列。这在 qt 中很容易做到。

然而问题是我当然不能简单地使用 2 个 forloop 来访问每个图块,因为你不能在名称中使用变量。(“tile_i_j”不存在。)为了解决这个问题,我决定创建一个包含每个标签的数组。但是,由于前面提到的问题,我无法有效地初始化数组。

所以问题是:如何避免编写一大段代码?当前代码的一小部分:

    Ui::BoardView *ui = new UI::BoardView; // BoardView is my class
    QLabel* m_boardLbArray[8][8];
    m_boardLbArray[0][0] = ui->tile_0_0;
    m_boardLbArray[0][1] = ui->tile_0_1;
    m_boardLbArray[0][2] = ui->tile_0_2;
    m_boardLbArray[0][3] = ui->tile_0_3;
    m_boardLbArray[0][4] = ui->tile_0_4;
    // ...

注意:抱歉,我没有发布您可以简单地复制和运行的部分代码,但我不知道如何因为它与 gui 相关。

4

1 回答 1

1

听起来您正在 Qt Designer 中创建您的图块(QLabels);实现此目的的一种更简洁的方法是以编程方式创建它们。您可以在您想要的位置在 Designer 中的表单中添加网格布局,然后执行以下操作:

QGridLayout *layout = ui->gridlayout;
QLabel* m_boardLbArray[8][8];
for(int row=0; row<8; row++)
  for(int col=0; col<8; col++)
  {
    m_boardLbArray[row][col] = new QLabel(this);
    m_boardLbArray[row][col]->setText(tr("This is row %1, col %2")
      .arg(row).arg(col));
    layout->addWidget(m_boardLbArray[row][col], row, col);
  }
于 2013-07-25T17:55:27.407 回答