2014-03-13 87 views
0

所以,这里是我的代码:如何通过标签作为一个额外的回调函数的参数

#include <gtk/gtk.h> 

void buttonCall(GtkWidget * widget1, GtkWidget * widget2){//gpointer data){ 

gtk_label_set_text(*label,"some other label"); 

} 

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

GtkWidget * window; 
GtkWidget * frame; 
GtkWidget * button; 
GtkWidget * label; 

gtk_init(&argc,&argv); 

window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
frame = gtk_fixed_new(); 

gtk_container_add(GTK_CONTAINER(window),frame); 


button = gtk_button_new_with_label("button"); 
label = gtk_label_new("some label"); 

gtk_container_add(GTK_CONTAINER(frame),label); 
gtk_fixed_put(GTK_FIXED(frame), label, 10,50); 

gtk_container_add(GTK_CONTAINER(frame),button); 
gtk_fixed_put(GTK_FIXED(frame), button, 10,100); 

g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(buttonCall),&label); 

gtk_widget_show_all(window); 

gtk_main(); 
return 0; 
} 

我基本上要点击一个按钮,改变我的标签上的文字。我认为通过传递标签的地址我可以做到这一点,但它不起作用。我的执行不正确?

任何帮助将不胜感激!谢谢!

回答

1

该代码甚至没有编译,对吧?这通常意味着实施不正确。您现在正在让我们为您进行调试:如果您不了解编译错误,至少将它们粘贴到问题中。如果某些事情“不起作用”,那么您需要确切地说出什么是失败的。

现在,标签已在main()指针,所以你并不需要获得地址g_signal_connect():刚刚从“&标签”删除“&”。在点击处理你的第二个参数被称为WIDGET2所以这就是你需要在函数内部使用什么:

gtk_label_set_text(GTK_LABEL(widget2),"some other label"); 

这应该使代码的工作,但我给另一个忠告:使用GtkFixed是一个坏几乎在所有情况下都有这样的想法:学习如何使用GtkGrid(如果你的GTK版本有)或GtkBoxes来完成盒子布局,它最终会付出代价。

相关问题