GTK:g_signal_connect()发送错误的地址

时间:2014-06-26 12:12:04

标签: c gtk

我有这段代码:

int gui_showScore(struct Game *game)
{
    printf("%p\n", game);
    return NO_ERROR;
}

int gui_createButtonShowScore(GtkWidget *fixed, GtkWidget **showScore,
                          struct Game *game)
{
    if (fixed == NULL)
        return POINTER_NULL;

    printf("%p\n", game);
    *showScore = gtk_button_new_with_label("Show score");
    gtk_fixed_put(GTK_FIXED(fixed), *showScore, 620, 50);
    gtk_widget_show(*showScore);
    g_signal_connect(G_OBJECT(*showScore), "clicked",
                     G_CALLBACK(gui_showScore), game);

    return NO_ERROR;
}

为什么按下按钮时,用其他指针调用gui_showScore()?

例如:在gui_createButtonShowScore()中,指针值游戏为0x1249590,按下时按钮称为gui_showScore(),指针值游戏为0x12202b0。为什么呢?

如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

阅读documentation for the "clicked" signal

void user_function(GtkButton *button, gpointer   user_data)

第一个参数始终是接收信号的对象, last 参数是用户指针,其中传递连接处理程序时提供的数据。