GTK信号来自C语言按钮阵列

时间:2015-05-09 19:37:13

标签: c arrays button gtk

我在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个按钮......有没有办法,可以在一个功能中完成?例如,我想更改单击按钮的颜色,但我不知道如何编写代码。

非常感谢您的帮助。

1 个答案:

答案 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
}