回调不接收信号data.hello1和data.hello2。我该如何解决?

问题描述 投票:0回答:1

这是构造函数的初始化,该函数包含两个名为hello1和hello2的函数,它们唯一要做的就是在按下两个按钮之一时发送问候语。

  button = gtk_builder_get_object (builder, "boton1");
  g_signal_connect (button, "clicked", G_CALLBACK (data.hello1()), NULL); 

(错误:无效值,应该被忽略)//第45行错误,回调不接收信号数据。hello1()

  button = gtk_builder_get_object (builder, "boton2");
  g_signal_connect (button, "clicked", G_CALLBACK (data.hello2()), NULL);

(错误:无效值,应该被忽略)//第46行错误,回调不接收信号数据。hello2()

c gtk
1个回答
0
投票

您应该看一下

https://developer.gnome.org/gtk-tutorial/stable/x159.html

似乎您正在使用类似的东西

void hello1() { g_print ("hello: 1. \ n"); }
void hello2() { g_print ("hello: 2. \ n"); }

作为函数的回调。

这是不正确的,在gtk中,每个信号都必须连接到接收适当参数的功能。

"clicked"的情况下,您的功能应与:

void hello1(GtkWidget *widget, gpointer data)
{
    g_print("hello: 1. \ n");
}

void hello2(GtkWidget *widget, gpointer data)
{
    g_print("hello: 2. \ n");
}

注意,在这种情况下,您不需要两个功能,如您所见,在g_signal_connect中,第四个参数是数据,在这种情况下,您可以重用相同的功能并打印data

void hello(GtkWidget *widget, gpointer data)
{
    g_print("hello: %s. \ n", (char *)data);
}

使用以下配置信号:

g_signal_connect (button, "clicked", G_CALLBACK (data.hello()), "1");

g_signal_connect (button, "clicked", G_CALLBACK (data.hello()), "2");
© www.soinside.com 2019 - 2024. All rights reserved.