使用GTK回调函数提交数组

时间:2013-04-30 08:26:14

标签: c arrays callback gtk

我的主要功能中有很多检查按钮(cbuttons [])。

单击安装按钮后,将提交带有复选按钮的阵列。

int main(int argc, char *argv[]) {

GtkWidget *cbuttons[13];

[...]

for(i = 0; i < 6; i++) {
    cbuttons[i] = gtk_check_button_new_with_label(cbuttons_label[i]);
    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbuttons[i]), TRUE);
    gtk_box_pack_start(GTK_BOX(vbox_lcbuttons), cbuttons[i], FALSE, TRUE, 0);
    gtk_widget_show(cbuttons[i]);
 }

   [...]

   g_signal_connect(button_install, "clicked", G_CALLBACK(install), &cbuttons);

}

现在我想用data []分析不同按钮的状态,但它不起作用:

警告:解除引用'void *'指针。

我是GTK的新手。也许是这样做的错误方法?任何人都能以正确的方式帮助我吗? (抱歉我的英语不好。我对语言不太熟悉。)

void install(GtkWidget *widget, gpointer data) {

if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(*data[0]))) {
    func1();
}
  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(*data[1]))) {
    func2();
  }
  [...]

}

1 个答案:

答案 0 :(得分:1)

您只需要在回调中将通用(gpointer,这只是void *的同义词)转换为正确输入的指针:

static void install(GtkWidget *widget, gpointer data)
{
    GtkWidget **widgets = data;

    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets[0]))) {
      func1();
    }
    if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets[1]))) {
      func2();
    }
   [...]
}