【问题标题】:Submit array with GTK callback function使用 GTK 回调函数提交数组
【发布时间】:2013-04-30 08:26:14
【问题描述】:

我的主要功能中有很多检查按钮 (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();
  }
  [...]

}

【问题讨论】:

    标签: c arrays callback gtk


    【解决方案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();
        }
       [...]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 2021-12-09
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      相关资源
      最近更新 更多