我有这段代码:
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。为什么呢?
如何解决这个问题?
答案 0 :(得分:3)
阅读documentation for the "clicked" signal:
void user_function(GtkButton *button, gpointer user_data)
第一个参数始终是接收信号的对象, last 参数是用户指针,其中传递连接处理程序时提供的数据。