0

我想創建一個類型爲GtkWidget的10x20數組。我想讓每個人都成爲一個GtkEventBox,我將在其中添加一個標籤。創建2D GtkWidget數組

我該如何創建和使用2D GtkWidget *數組?

這是我到目前爲止已經試過:

//global variable: 
GtkWidget *labelPlate[ROWS][COLUMNS]; 
... 
... 
inside the function that creates the table and attaches the event boxes to it 
//my table, where the EventBoxes will be attached to 
GtkWidget *finalPlateTable = gtk_table_new (10, 20, TRUE); 

int i, j; 
for(i = 0; i<ROWS; i++){ 
    for(j=0 ; j<COLUMNS; j++){ 
     //Make a char with the current float and create a label with it. 

     char finalString[14]; 
     sprintf(finalString, "%.2f", plate[i][j]); 

     GtkWidget *label = gtk_label_new(finalString);; 

     //Labels cannot have bg color, so attach each label to an event box 
     /*HERE I GET SEG FAULT*/ 
     labelPlate[i][j]=gtk_event_box_new(); 

        //adding the label to my eventbox 
     gtk_container_add(GTK_CONTAINER(labelPlate[i][j]), label); 

     //Add the corresponding bg color to each event box 
     GdkColor color; 
     switch(scalePlate[i][j]){ 
          ... 
          ... 
      break; 
     } 
        //coloring the event box with the corresponding background 
     gtk_widget_modify_bg (GTK_WIDGET(labelPlate[i][j]), GTK_STATE_NORMAL, &color); 
        //attach the event box to the appropriate location of my table 
     gtk_table_attach_defaults (GTK_TABLE (finalPlateTable), labelPlate[i][j], j, j+1, i, i+1); 
     //show them! 
     gtk_widget_show(label); 
     gtk_widget_realize(labelPlate[i][j]); 
    } 
} 
//adding the table to my vertical box, and show both of them 
gtk_box_pack_start(GTK_BOX (verticalBox), finalPlateTable, TRUE, TRUE, 10); 

gtk_widget_show (finalPlateTable); 
gtk_widget_show (verticalBox); 

我想指出的是,我是相當新的ç,我不知道如何使用malloc(但我懷疑我現在應該利用它)。

回答

0

我找到了一個解決方案:

初始化數組:

GtkWidget **myarray; 
myarray = g_new(GtkWidget *, ROWS*COLUMNS); 

然後使用功能訪問特定的行和列:

int returnPosAt(int row, int column){ 
    return row*COLUMNS+column; 
} 

的話,那麼,你可以調用

myarray[returnPosAt(i, j)]=gtk_event_box_new(); 

因此,實際上你有一個一維數組,通過調用函數,你可以得到2D位置(i,j)的相應一維位置。

+0

你可以接受你自己的問題的答案... –