制作标签数组的有效方法

时间:2013-07-25 17:22:48

标签: c++ arrays qt user-interface label

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

然而问题是,由于你不能在名字中使用变量,因此我不能简单地使用2个forloops来访问每个磁贴。 (“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相关。

1 个答案:

答案 0 :(得分:1)

听起来你在Qt Designer中创建了你的瓷砖(QLabel);实现这一目标的更简洁方法是以编程方式创建它们。您可以执行类似的操作,例如在您想要的位置向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);
  }