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

tes*_*act 4 c gtk signals

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

g_signal_connect(G_OBJECT(Apply),"clicked",G_CALLBACK(apply_clicked),#a argument#);

之后,apply_clicked()我希望保存输入的文本.

我的问题是:如何将这些传递gtk_entry给我的回调函数apply_clicked?如果它只是一个我只是设置它# an argument #,但我应该怎么做多个条目?

jst*_*ast 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);
Run Code Online (Sandbox Code Playgroud)

然后在apply_clicked中:

GtkEntry *entry1 = g_object_get_data (context_object, "entry1");
...
Run Code Online (Sandbox Code Playgroud)

通常context_object将是GtkDialog或这些小部件存在的任何内容.

或者,如果您继承GtkDialog,则可以执行以下操作:

struct _MyDialog {
    GtkDialog parent_object;
    GtkEntry *entry1;
    GtkEntry *entry2;
    ...
};
Run Code Online (Sandbox Code Playgroud)

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