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;
// ...
}
我正在使用 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;
// ...
}