gtk 3.0 对多个开关使用相同的回调

gtk 3.0 use the same callback for several switches

我正在使用 GTK3.0 和 C 创建 Linux GUI,我想对多个开关使用相同的回调。为了区分被点击的开关,我试图在 g_signal_connect 中使用 gpointer 参数,但回调似乎没有收到正确的值。

我这样创建信号:

g_signal_connect(led1_switch, "state-set", G_CALLBACK(on_gpio_btn_click), (gpointer)"LED1");
g_signal_connect(led2_switch, "state-set", G_CALLBACK(on_gpio_btn_click), (gpointer)"LED2");

并且回调试图让 gpointer 传递:

    static void on_gpio_btn_click(GtkWidget *wid, gpointer ptr)
    {
        int gpio;
        int val = 0;
        char *gpio_switch = ptr;
...

但是当我调试应用程序时,ptr指针的值为0x1,一个错误的内存地址。

不应该指向常量字符串“LED1”所在的内存地址吗? 我究竟做错了什么?如何为多个小部件共享相同的回调?我有 8 个开关来控制 GPIO,我宁愿为所有开关设置一个回调,而不是创建八个。

您的函数签名错误:第二个参数是开关状态的值,可以在 documentation of the "state-set" signal 中找到。这也是为什么值为 1 的原因:这就是 TRUE.

的实际值

换句话说,您的回调将是这样的:

    static void on_gpio_btn_click(GtkSwitch *swtch, gboolean state, gpointer ptr)
    {
        int gpio;
        int val = 0;
        char *gpio_switch = ptr;
        // ...
    }