Как передать значение нескольких кнопок прокрутки в функцию? (GTK / C) - PullRequest
0 голосов
/ 23 ноября 2018

У меня проблема с передачей нескольких значений из кнопок прокрутки, которые я пытаюсь сделать, много обратных вызовов с помощью кнопки, но мне нужно получать и манипулировать многими переменными одновременно.

gint grab_int_value (GtkSpinButton *spinbutton, gpointer user_data)
{
    gint steps = gtk_spin_button_get_value_as_int (user_data);
    printf ("The value of the step is: %d ms.\n", steps);
}

done = gtk_button_new_with_mnemonic("_DONE");
g_signal_connect(done, "clicked", G_CALLBACK(grab_int_value), 
                                               spin_button1);
g_signal_connect(done, "clicked", G_CALLBACK(grab_int_value), 
                                               spin_button2);

1 Ответ

0 голосов
/ 23 ноября 2018

Создайте struct с указателями на все объекты, которыми вы должны манипулировать в обратных вызовах, и добавьте указатель на него в качестве пользовательских данных:

typedef struct {
    GtkWidget *spin_button1;
    GtkWidget *spin_button2;
} Widgets;

...

Widgets* w = g_new(Widgets, 1);
w->spin_button1 = spin_button1;
w->spin_button2 = spin_button2;

...

g_signal_connect(done, "clicked", G_CALLBACK(grab_int_value), w);
g_signal_connect(done, "clicked", G_CALLBACK(grab_int_value), w);

...

int grab_int_value(GtkSpinButton *spinbutton, gpointer user_data) {
    Widgets *w = (Widgets *) user_data;
    int steps = gtk_spin_button_get_value_as_int(w->spin_button1);
    ...
}
...