所以,这是我的代码:
#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的地址能够做到这一点,但它不起作用。我的实施不正确吗?
任何帮助将不胜感激!谢谢!
答案 0 :(得分:1)
那个代码甚至没有编译,对吧?这通常意味着实施不正确。您现在正在让我们为您进行调试:如果您不理解编译错误,至少将它们粘贴到问题中。如果某些东西“不起作用”,你需要准确说出失败的原因。
现在,标签已经是main()
中的指针,因此您无需获取g_signal_connect()
的地址:只需删除'&amp;'即可来自'&amp; label'。在单击的处理程序中,您的第二个参数称为widget2,因此您需要在函数内使用:
gtk_label_set_text(GTK_LABEL(widget2),"some other label");
这应该使代码工作,但我会给出另一条建议:在几乎每种情况下使用GtkFixed是一个坏主意:学习用GtkGrid(如果你的GTK版本有)或GtkBoxes,它的盒子布局最终会支付。