2013-04-30 3 views
0

У меня есть клавиатура с 12 кнопками. Когда нажата некоторая кнопка, я хочу, чтобы все кнопки получили альтернативные метки. Как это можно сделать, я полагаю, мне нужно использовать массив для этой цели?Изменить несколько кнопок GTK

ответ

1

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

Это часто лучше, чтобы обернуть всю такую ​​информацию о состоянии в структуре, так как он хорошо масштабируется:

typedef struct { 
    GtkWidget *keypad[12]; 
} GuiData; 

Тогда просто создать экземпляр структуры раз, возможно, в начале main(), и передать его вокруг:

int main(void) 
{ 
    GuiData gui; 

gui.keypad[0] = gtk_button_new_with_label("1"); 

/* ... */ 

g_signal_connect(G_OBJECT(some_widget), "clicked", 
        G_CALLBACK(cb_some_button_clicked), &gui); 
} 

Обратите внимание, как &gui используется для передачи указателю на структуру состояния GUI функции обратного вызова для работы с нажатием кнопки «некоторые кнопки».

Внутри функции обратного вызова, вы можете получить доступ к клавиатуре:

static void cb_some_button_clicked(GtkWidget *object, gpointer user) 
{ 
    GuiData *guidata = user; 

    gtk_button_set_label(GTK_LABEL(guidata->keypad[0], "4711"); 
} 

Я не пробовал это сейчас, но выше должна быть примерно правильно.

Смежные вопросы