c++ - GTK+ : passing data with g_signal_connect not working

标签 c++ gtk

我正在尝试通过 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/

相关文章:

c++ - 更改全局变量名称

c++ - 抽象类的命名约定?

gtk - 如何从文件扩展名中获取 GTK mime-type/content-type 信息

java - 强制java程序使用GTK2

rust - Gtk-错误 ** : failed to add UI: Error on line 1 char 1: Document must begin with an element

c++ - target_include_directories 如何工作 cmake 如何包含本地库 <path/lib.h>

c++ - 复制构造函数会在这里工作吗?

c++ - 我在哪里可以获得 "useful"C++ 二分搜索算法?

c++ - 使用 Webkit < 1.3 访问 Gtk+ 中的 DOM 元素

c - Glade Textview不显示文本