gpt4 book ai didi

"delete-event"信号的回调函数传递了错误的变量值

转载 作者:太空宇宙 更新时间:2023-11-04 02:25:18 24 4
gpt4 key购买 nike

"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 是一个转换,然后框架转换回它期望的函数指针类型,必须您养成阅读手册的习惯信号你连接。这里没有类型安全,编译器无法捕获这些类型的错误。

关于 "delete-event"信号的回调函数传递了错误的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52362012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com