我正在尝试通过 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。我将 new int() 更改为 3、5 等...,它始终打印 4。
我很困惑。请问有人知道哪里出了问题吗?
编辑:
有人帮我弄明白了。函数签名实际上是错误的并且缺少一个参数。这很愚蠢,但很难弄清楚。
最佳答案
是的,您对 GtkWidget::button_press_event 的回调签名是错的。但是,如果您要检测的是对 GtkButton 的点击,请连接到 GtkButton::clicked信号代替。
关于c++ - GTK+ : passing data with g_signal_connect not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8146420/