2013-07-25 29 views
1

我正在製作棋盤遊戲,我需要在我的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; 
    // ... 

注:對不起,我沒有張貼的代碼,你可以簡單地複製和運行的一部分,但我不知道如何,因爲它的圖形用戶界面有關。

+0

不幸的是,除了可能使用宏外,沒有簡單的方法。 –

+0

爲什麼使用'tile_0_0',''tile_0_1'等,而不是簡單地將它們存儲在數組中? – Casey

+0

不知道如何。請告訴我。 – Tremnor

回答

1

這聽起來像你在Qt設計器中創建你的瓷磚(QLabels)一個更清晰的方法是通過編程創建它們。你可以做一些事情,比如在你想要的位置添加一個Grid Layout到你的表單中,然後執行:

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

正是我需要知道的,非常感謝! – Tremnor

相關問題