如何将标签作为额外的回调函数参数传递

时间:2014-03-13 17:14:49

标签: gtk gtk3

所以,这是我的代码:

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

我基本上想要点击按钮并更改标签上的文字。我认为通过传递标签I的地址能够做到这一点,但它不起作用。我的实施不正确吗?

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

1 个答案:

答案 0 :(得分:1)

那个代码甚至没有编译,对吧?这通常意味着实施不正确。您现在正在让我们为您进行调试:如果您不理解编译错误,至少将它们粘贴到问题中。如果某些东西“不起作用”,你需要准确说出失败的原因。

现在,标签已经是main()中的指针,因此您无需获取g_signal_connect()的地址:只需删除'&amp;'即可来自'&amp; label'。在单击的处理程序中,您的第二个参数称为widget2,因此您需要在函数内使用:

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

这应该使代码工作,但我会给出另一条建议:在几乎每种情况下使用GtkFixed是一个坏主意:学习用GtkGrid(如果你的GTK版本有)或GtkBoxes,它的盒子布局最终会支付。