c - 将多个参数传递给GTK中的回调函数

时间:2011-07-13 19:28:37

标签: c gtk signals

所以,我正在努力实现以下目标:用户应该能够填写多个gtk_entry并点击Apply之后,点击后我想要Apply }按钮发出信号,如下所示:

  

g_signal_connect(G_OBJECT(Apply),“点击”,   G_CALLBACK(apply_clicked),#a argument#);

之后,在apply_clicked()中,我希望保存输入的文字。

我的问题是:如何将gtk_entry传递给我的回调函数apply_clicked? 如果它只是一个,我只需将其设置为# an argument #,但我应该如何处理多个条目?

2 个答案:

答案 0 :(得分:5)

这样做的典型方法是:

g_object_set_data (context_object, "entry1", entry1);
g_object_set_data (context_object, "entry2", entry2);

g_signal_connect (G_OBJECT (Apply), "clicked", G_CALLBACK (apply_clicked), context_object);

然后在apply_clicked:

GtkEntry *entry1 = g_object_get_data (context_object, "entry1");
...

通常,context_object将是GtkDialog或其他任何小部件。

或者,如果你继承GtkDialog,你可以这样做:

struct _MyDialog {
    GtkDialog parent_object;
    GtkEntry *entry1;
    GtkEntry *entry2;
    ...
};

然后,在构建对话框时,只需设置entry1,2,3等...而且你不需要使用g_object_ [g,s] et_data()hack。

答案 1 :(得分:1)

创建一个数据结构(可能是一个链表),以包含指向gtk_entry的指针并传递它。或者更好的是,为什么不直接将指针传递给包含所有这些gtk_entry的对象?