簡體   English   中英

使用GTK回調函數提交數組

[英]Submit array with GTK callback function

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

}

您只需要在回調中將通用指針( 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();
    }
   [...]
}

暫無
暫無

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

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