Tremnor
Tremnor

Reputation: 35

Efficient way to make an array of labels

I'm making a board game and I need to display a 15 x 15 array in my gui. I decided to go with individual labels which contains one element of the array. This means I do have quite a lot of labels. I gave each label the name "tile_0_0" with the first 0 being the row and the second 0 being the column. This was quite easy to do in qt.

The problem however is that I ofcourse can't simply use 2 forloops to access each tile since you can't use variables in names. ("tile_i_j" does not exist.) To solve this I decided to make an array which contains each and every label. I however cannot initialise the array efficient because of the earlier mentioned problem.

So the question is: How can I avoid having to write a giant block of code? A small piece of the current code:

    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;
    // ...

Note: Sorry that I didn't post a part of code you could simply copy and run, but I do not know how since it's gui related.

Upvotes: 1

Views: 2799

Answers (1)

docsteer
docsteer

Reputation: 2516

It sounds like you are creating your tiles(QLabels) in Qt Designer; A cleaner way to achieve this is to create them programatically. You can do something like add a Grid Layout to your form in Designer in the location you want them, and then do:

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);
  }

Upvotes: 1

Related Questions