簡體   English   中英

如何在gtk +中創建按鈕數組

[英]how to create array of button in gtk+

我想在gtk +中創建按鈕數組。 因此,如何修改“ gtkWidget * button”以創建按鈕數組。 我已將聲明修改為'gtkWidget(* button)[20]',並在下面的代碼中使用了此按鈕。 但是,它顯示了一個錯誤。 “從類型'struct GtkWidget *'分配給'struct GtkWidget * [20]'類型時,類型不兼容”

gtkWidget (*button)[20];
static char *values[100] = 

 {  "127.0.0.1",   "Idle",
 "192.168.73.129", "Idle", 
 "192.168.73.130", "Idle",
 "192.168.73.131", "Idle",
 "192.168.73.132", "Idle",
 "192.168.73.129", "Idle",
 "192.168.73.131", "Idle", };

for(i=0; i < 6; i++) {
for( j=0; j < 2; j++) {
  button1[pos] = gtk_button_new_with_label(values[pos]);
  gtk_table_attach_defaults(GTK_TABLE(table), button1[pos], j, j+1, i+1, i+2 );
  pos++;
} }

gtkWidget (*button)[20]; 它在內部是無效的賦值,就像'struct GtkWidget *[20]'表示數組下標指針。

以簡單的方式創建按鈕數組,例如

GtkWidget *buttons[3][3];
  for (i=0;i<3; i++)
    for (j=0;j<3; j++) 
          buttons[i][j] = gtk_button_new ();

首先,在Gtk3中不推薦使用GtkTable,因此應改用GtkGrid。

其次,您實際上並不需要將這些小部件存儲在數組中,因此,簡單地遍歷值列表並在每個步驟中創建兩個按鈕是一種更好的方法:

GtkWidget *ip_button,
          *status_button;
gchar *values[] = {
    "127.0.0.1",      "Idle",
    "192.168.73.129", "Idle", 
    "192.168.73.130", "Idle",
    "192.168.73.131", "Idle",
    "192.168.73.132", "Idle",
    "192.168.73.129", "Idle",
    "192.168.73.131", "Idle",
};

for (i = 0; i < value_count; i += 2) {
    ip_button = gtk_button_new_with_label(values[i]);
    gtk_grid_attach(grid, button, i, 0, 1, 1);
    g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(ip_button_callback), NULL);

    status_button = gtk_button_new_with_label(values[i + 1]);
    gtk_grid_attach(grid, button, i, 1, 1, 1);
    g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(status_button_callback), ip_button);
}

ip_button_callback()函數中,可以使用gtk_button_get_label()獲取與按鈕關聯的IP地址,而在status_button_callback() ,可以獲取作為user_param傳遞的按鈕的標簽。

一個非常優雅的解決方案可能是使用IP地址作為表鍵將這些按鈕存儲在GHashTable中,但這需要在設計上進行更多思考(並且需要更多背景信息)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM