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

c-将多个参数传递给GTK中的回调函数,c,gtk,signals,C,Gtk,Signals,因此,我试图实现以下目标:用户应能够填写多个gtk_条目,然后单击Apply,单击之后,我希望Apply按钮发出一个信号,如下所示: g_信号连接(g_对象(应用),“单击”, G#U回调(应用#U单击),#参数#) 然后,在apply\u clicked()中,我希望保存输入的文本 我的问题是:如何将这些gtk_条目传递给我的回调函数apply_>? 如果只有一个,我会将其设置为#一个参数#,但是我应该如何处理多个条目呢?创建一个数据结构(可能是一个链表),以包含指向gtk\u条目的指针,并传

因此,我试图实现以下目标:用户应能够填写多个
gtk_条目
,然后单击
Apply
,单击之后,我希望
Apply
按钮发出一个信号,如下所示:

g_信号连接(g_对象(应用),“单击”, G#U回调(应用#U单击),#参数#)

然后,在
apply\u clicked()
中,我希望保存输入的文本

我的问题是:如何将这些
gtk_条目
传递给我的回调函数
apply_>?

如果只有一个,我会将其设置为
#一个参数#
,但是我应该如何处理多个条目呢?

创建一个数据结构(可能是一个链表),以包含指向
gtk\u条目的指针,并传递该指针。或者更好的是,为什么不将指针传递给包含所有这些内容的对象呢

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);
然后在应用中单击:

GtkEntry *entry1 = g_object_get_data (context_object, "entry1");
...
通常,context_对象将是GtkDialog或这些小部件所在的任何对象

或者,如果将GtkDialog子类化,则可以执行以下操作:

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

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

这种方法的问题是内存管理,因为现在您必须将该列表存储在某个地方,以便在不再需要时删除它。您可以将其粘贴在GtkDialog上,但为什么不使用我的替代建议呢?:)好的,我使用你的第一种方法,就像你指出的,现在我想检索文本:
gchar*string=gtk_entry\u get_text(gtk_entry(entry1))
,但它不起作用-
赋值从指针目标类型中丢弃“const”限定符
-这是为什么?
gtk\u entry\u get\u text()
返回
const char*
,而不是
char*
。将代码更改为
const gchar*string=gtk_entry\u get_text(gtk_entry(entry1))并且它应该编译。