2011-01-31 4 views
2
다음

에 GTK +에 콜백을 신호하는 것은 내 코드입니다 :통과 인수/인수가 C

#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()에 대한 호출에서 수행해야하는 작업은 무엇입니까?

답변

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; 
} 

희망이 방법이 더 위젯이 콜백에 전달 어쨌든

+0

들으 친구를, 안부 전을 구조체를 사용해야합니까? 또는 전 세계적으로 위젯을 선언해야합니다 (예 : static var/out of function var) ?? – capede

+0

콜백의 두 번째 매개 변수를 사용하여 위젯 배열이나 위젯 목록 또는 사용자 정의 구조에 대한 포인터를 비롯하여 필요한 모든 데이터를 전달할 수 있습니다. –