我试图通过g_signal_connect传递堆中分配的数据,但它显示出一些奇怪的行为。
我这样传递价值:
int *test = new int(100);
g_signal_connect(G_OBJECT(deviceButton), "button_press_event", G_CALLBACK(showDeviceAndConnect), (gpointer) test);
打印值:
static void showDeviceAndConnect(GtkWidget * deviceButton, gpointer data)
{
int *test = (int *) data;
fprintf(stderr, "Test: %d\n", *test);
}
打印的值始终为4。我将新的int()更改为3,5等等,它总是打印4。
我非常困惑。有谁请知道出了什么问题?
编辑:
有人帮我搞清楚了。函数签名实际上是错误的并且缺少一个参数。这很愚蠢,但很难弄明白。
答案 0 :(得分:4)
是的,您对GtkWidget::button_press_event的回调签名是错误的。但如果是你要检测的点击GtkButton,请连接到 GtkButton::clicked发出信号。