1
我想将对象传递给“clicked”事件的回调以设置目标标签的文本。如何将对象传递给GTK3回调函数?
这里是到目前为止我的代码:
#include <gtk/gtk.h>
typedef struct {
int i;
GtkWidget *target;
} Data;
void change(GtkWidget *widget,
Data *data)
{
gtk_label_set_text(GTK_LABEL(data->target), "it did!");
}
int main(int argc,
char* argv[])
{
gtk_init(&argc, &argv);
GtkWidget *window, *label, *button;
Data data;
data.i = 0;
data.target = label;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "GTKdemo");
g_signal_connect(window, "delete-event", G_CALLBACK(gtk_main_quit), NULL);
GtkGrid *grid = gtk_grid_new();
button = gtk_button_new_with_label("Click here");
g_signal_connect(button, "clicked", G_CALLBACK(change), &data);
gtk_grid_attach(grid, button, 0,0,1,1);
label = gtk_label_new("this will change");
gtk_grid_attach(grid, label, 0,1,1,1);
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(grid));
gtk_widget_show_all(window);
gtk_main();
return 0;
}
我正在尝试设置的label
文被点击button
时。 我试过gtk callback multiple arguments但没有骰子。帮帮我?
该程序显示的按钮和标签很好,但当我点击按钮时崩溃。 'change()'里面有什么问题,我只是不知道是什么。 – clinei 2014-09-30 15:59:13
我需要稍后通过对象提供其他数据。所以不使用对象不是一种选择。 – clinei 2014-09-30 16:02:23