0

我很难将整数传递给回调函数,因为最后一个参数g_signal_connect必须是指针。这是我将信号连接到回调的地方:

for (i=0;i<10;i++)
{

    ...
    gtk_widget_set_events(tab_ebs[i],GDK_BUTTON_PRESS_MASK);
    g_signal_connect (G_OBJECT (tab_ebs[i]), "button_press_event", G_CALLBACK (tab_clicked_cb), GINT_TO_POINTER(i));

}

这是回调:

void tab_clicked_cb (gpointer p)
{
    printf("tab #%d clicked\n", GPOINTER_TO_INT(p));
}

我在标准输出中得到的是如下语句:

tab #6578976 clicked
tab #6579264 clicked
tab #6579552 clicked
tab #6579840 clicked

当我只有十个标签时。如何在 64 位系统上将整数传递给回调 fcn?谢谢。

4

2 回答 2

2

没有让我走到一半。结果我的回调函数中也缺少事件的参数。这是有效的形式:

void tab_clicked (GtkWidget *widget, GdkEventButton *ev, gpointer p)
{
    printf("tab #%d clicked\n", GPOINTER_TO_INT(p));
}
于 2012-12-09T02:18:24.330 回答
0

您的回调函数可能是错误的,大多数 Gtk 回调处理程序将发起事件的小部件作为第一个参数传递给回调函数。所以它应该是例如

void tab_clicked_cb (GtkWidget *widget, gpointer p)
{
    printf("tab #%d clicked\n", GPOINTER_TO_INT(p));
}

编辑,Gtk文档根本不清楚它的回调处理程序是什么 button_press_event,文档读取为 button_press_event 的回调处理程序不接收任何参数。

于 2012-12-08T23:24:17.197 回答