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