将参数/参数信号传递给C中的GTK +上的回调

时间:2011-01-31 17:15:17

标签: c++ c gtk signals

这是我的代码:

#include <gtk/gtk.h>

G_MODULE_EXPORT void waka(GtkWidget *button, GtkWidget* entry1)
{
printf("%s",gtk_entry_get_text(GTK_ENTRY(entry1)));
}

int main(int argc, char * argv[])
{

GtkWidget *window, *button, *entry;

gtk_init(&argc,&argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

button = gtk_button_new_with_label("hha");
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(waka),entry);

entry = gtk_entry_new();

GtkWidget *vbox;

vbox = gtk_vbox_new(FALSE,2);

gtk_box_pack_start_defaults(GTK_BOX(vbox),button);
gtk_box_pack_start_defaults(GTK_BOX(vbox),entry);

gtk_container_add(GTK_CONTAINER(window),vbox);


gtk_widget_show_all(window);
gtk_main();


return 0;
}

当我启动它,并尝试在输入框中填写一些字符串,然后单击按钮时,它表示“分段错误”。发生了什么事?

此外,回调仅适用于一个用户数据参数。如果我想要两个或更多参数,我应该在回调函数中做什么,以及在g_signal_connect()的调用中怎么样?

1 个答案:

答案 0 :(得分:4)

问题是您在>初始化之前尝试使用指向条目 的指针。我已经改变了一些你的代码来解决这个问题,看看它是否适合你:

#include <gtk/gtk.h>

void waka(GtkWidget *button, GtkWidget* entry1)
{
 g_print("entry: %s\n", gtk_entry_get_text(GTK_ENTRY(entry1)));
}

int main(int argc, char * argv[])
{
 GtkWidget *window, *button, *entry, *vbox;

 gtk_init(&argc, &argv);

 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 button = gtk_button_new_with_label("hha");
 entry = gtk_entry_new();
 vbox = gtk_vbox_new(FALSE, 2);

 gtk_box_pack_start_defaults(GTK_BOX(vbox),button);
 gtk_box_pack_start_defaults(GTK_BOX(vbox),entry);

 gtk_container_add(GTK_CONTAINER(window),vbox);

 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(waka), entry);

 gtk_widget_show_all(window);
 gtk_main();

 return 0;
}

希望这有帮助,尊重