所以,我正在努力实现以下目标:用户应该能够填写多个gtk_entry
并点击Apply
之后,点击后我想要Apply
}按钮发出信号,如下所示:
g_signal_connect(G_OBJECT(Apply),“点击”, G_CALLBACK(apply_clicked),#a argument#);
之后,在apply_clicked()
中,我希望保存输入的文字。
我的问题是:如何将gtk_entry
传递给我的回调函数apply_clicked
?
如果它只是一个,我只需将其设置为# an argument #
,但我应该如何处理多个条目?
答案 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
的对象?