每当我将一些东西传递给回调函数时触发"delete-event"
意图在窗口退出时清理某些东西,我发送的值就会被破坏。
例如,这是一个说明此问题的小程序:
#include <gtk/gtk.h>
void window_quit(GtkWidget *window, int *v)
{
g_print("%d\n", *v);
gtk_main_quit();
}
void normal_function(int *v)
{
g_print("%d\n", *v);
}
int main(int argc, char **argv)
{
gtk_init(&argc, &argv);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show(window);
int v = 5;
normal_function(&v);
g_signal_connect(window, "delete-event", G_CALLBACK(window_quit), &v);
gtk_main();
}
如何在退出时调用函数并传递正确的值?顺便说一句,我没有正常调用的函数或其他信号的问题。
您的信号处理程序不是"delete-event"
的正确类型。 The reference manual为GTK3指定它需要:
gboolean
user_function (GtkWidget *widget,
GdkEvent *event,
gpointer user_data)
你的显然不是那样的。结果可能是一堆未定义的行为。你看到的腐败数据可能是GdkEvent
作为int
的双打。尽管框架期望你的函数返回一些东西,你也不会返回任何值。
由于G_CALLBACK
是一个强制转换器,然后框架会回转到它所期望的函数指针类型,因此您必须养成阅读手册以获取所连接信号的习惯。这里没有类型安全性,编译器无法捕获这些类型的错误。