我在C中用GTK创建了一系列按钮,但是我有一个问题 - 如何从中捕获信号?
GtkWidget *board[10][10];
for( i=0; i < 10; i++) {
for( j=0; j < 10; j++) {
board[i][j] = gtk_button_new();
}
}
我当然可以像这样一个接一个地做到这一点
g_signal_connect (board[0][0], "clicked", G_CALLBACK(show_info), NULL;
但是我打算制作一个棋盘游戏并且有100个按钮......有没有办法,可以在一个功能中完成?例如,我想更改单击按钮的颜色,但我不知道如何编写代码。
非常感谢您的帮助。
答案 0 :(得分:1)
一种方法是动态分配一些用户数据传递给回调。
typedef struct {
int x;
int y;
} coordinate;
int main(int argc, char *argv[]) {
// ... some code here
for(i=0; i<10; i++) {
for(j=0; j<10; j++) {
coordinate *c = malloc(sizeof *c);
c->x = i;
c->y = j;
board[i][j] = gtk_button_new();
g_signal_connect_data(board[i][j],
"clicked",
G_CALLBACK(show_info),
c,
(GClosureNotify)free,
0);
}
}
// some other code
}
然后在回调中:
void show_info(GtkButton *button, gpointer userdata) {
coordinate *c = userdata;
// use c->x and c->y to determine which button is pressed
}