这是构造函数的初始化,该函数包含两个名为hello1和hello2的函数,它们唯一要做的就是在按下两个按钮之一时发送问候语。
button = gtk_builder_get_object (builder, "boton1");
g_signal_connect (button, "clicked", G_CALLBACK (data.hello1()), NULL);
(错误:无效值,应该被忽略)//第45行错误,回调不接收信号数据。hello1()
button = gtk_builder_get_object (builder, "boton2");
g_signal_connect (button, "clicked", G_CALLBACK (data.hello2()), NULL);
(错误:无效值,应该被忽略)//第46行错误,回调不接收信号数据。hello2()
您应该看一下
https://developer.gnome.org/gtk-tutorial/stable/x159.html
似乎您正在使用类似的东西
void hello1() { g_print ("hello: 1. \ n"); }
void hello2() { g_print ("hello: 2. \ n"); }
作为函数的回调。
这是不正确的,在gtk
中,每个信号都必须连接到接收适当参数的功能。
在"clicked"
的情况下,您的功能应与:
void hello1(GtkWidget *widget, gpointer data)
{
g_print("hello: 1. \ n");
}
void hello2(GtkWidget *widget, gpointer data)
{
g_print("hello: 2. \ n");
}
注意,在这种情况下,您不需要两个功能,如您所见,在g_signal_connect
中,第四个参数是数据,在这种情况下,您可以重用相同的功能并打印data
:
void hello(GtkWidget *widget, gpointer data)
{
g_print("hello: %s. \ n", (char *)data);
}
使用以下配置信号:
g_signal_connect (button, "clicked", G_CALLBACK (data.hello()), "1");
或
g_signal_connect (button, "clicked", G_CALLBACK (data.hello()), "2");