Я хочу использовать функцию g_signal_connect()
для изменения данных в конкретном struct/class
.Так что, на мой взгляд, лучше всего использовать указатель на struct
.проблема в том, что информация указателя, кажется, постоянно меняется.
Я потратил много времени, чтобы выяснить, почему это происходит, но я понятия не имею.Я могу скомпилировать и запустить код без каких-либо ошибок, но вывод всегда отличается.
Позже я хочу использовать несколько event_box для подключения к массиву структуры или массиву класса (event_box[0]
connect to data[0]
, ...).
Я надеюсь, что кто-то понимает, что я имею в виду, и я был бы рад любой помощи.
#include<gtk/gtk.h>
struct d
{
bool status;
int ID;
};
void end_program(GtkWidget *wid, gpointer ptr)
{
gtk_main_quit();
}
void box_click(GtkWidget *wid, gpointer user_data)
{
struct d *data = (struct d*)user_data;
printf("status = %i\n", data->status);
printf("ID = %i\n", data->ID);
}
int main (int argc, char *argv[])
{
struct d data;
data.status = 0;
data.ID = 1;
gtk_init(&argc, &argv);
GtkWidget *win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
GtkWidget *event_box = gtk_event_box_new();
g_signal_connect(G_OBJECT(event_box), "button_press_event", G_CALLBACK(box_click), &data);
gtk_container_add(GTK_CONTAINER(win), event_box);
gtk_widget_show_all(win);
g_signal_connect(win, "delete_event", G_CALLBACK(end_program),NULL);
gtk_main();
return 0;
}
Вывод, если я нажимаю на поле несколько раз:
status = 4
ID = 32193184
status = 5
ID = 32193184
status = 4
ID = 32193184
status = 6
ID = 32193184
status = 4
ID = 32193184