2014-03-01 31 views
0

按钮的阵列我想创建GTK +按键的阵列。所以,如何修改'gtkWidget *按钮'来创建按钮数组。我已将该声明修改为'gtkWidget(* button)[20]',并在下面的代码中使用了此按钮。但是,它显示了一个错误。 “分配给输入时不兼容的类型‘结构的GtkWidget * [20]’从类型‘结构的GtkWidget *’”如何在GTK +

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

所以想要像'(gktbutton *)[20]'或需要查看https://developer.gnome.org/gnome-devel-demos/unstable/guitar-tuner.c.html.en –

+0

也关于'GtkWidget的什么*按钮[X] [Y]' –

+0

我已经检查(gktbutton *)[20],但它不工作。 –

回答

3

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(); 
1

首先,GtkTable被弃用Gtk3,所以你应该使用一个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这些按钮,但需要多一点思考设计(和需要更多的背景资料)。