gpt4 book ai didi

c - gtk 处理程序有错误数据

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

我有一些按钮,我想追踪哪个按钮被按下了。按下按钮后,我需要根据按下的按钮显示一个包含不同数据的新窗口或对话框

for(j = 0; j < 4; j++)
{
eventbox = gtk_event_box_new();
show_button[j] = gtk_button_new_with_label (label);
gtk_table_attach_defaults (GTK_TABLE (table), eventbox, left_pos, right_pos , top_pos, bot_pos);
gtk_container_add(GTK_CONTAINER(eventbox), show_button[j]);
g_signal_connect (G_OBJECT (show_button[j]), "clicked", G_CALLBACK (show), &j);

left_pos = right_pos + shift;
right_pos = left_pos + width;
gtk_widget_modify_bg(eventbox, GTK_STATE_NORMAL, &color[0]);
}

我的处理程序是

void show(GtkWidget *window, gpointer data)
{
int i = *(int*)data;
printf("%d\n", i);
GtkWidget *marking_table;
window[i] = gtk_window_new (GTK_WINDOW_POPUP);
gtk_widget_set_size_request(window[i], 1000, 700);
gtk_window_set_policy (GTK_WINDOW (window[i]), FALSE, FALSE, TRUE);
gtk_window_set_position(GTK_WINDOW(window[i]), 1);
gtk_widget_set_app_paintable(window[i], TRUE);
g_signal_connect (G_OBJECT (window[i]), "delete_event", G_CALLBACK (delete_event), NULL);
marking_table = gtk_table_new (1000, 700, TRUE);
gtk_container_add (GTK_CONTAINER (window[i]), marking_table);
}

例如,由于“i”= 20350345,我经常遇到段错误。可能有另一种方法来了解按下了什么按钮?

欢迎任何帮助!

最佳答案

您的用户数据是指向“j”的指针。当“j”超出范围时,指针会一直指向内存,然后可以将其用于其他用途。

你必须为用户数据分配内存(通常是一个包含你需要的所有数据的结构)或者在这种特殊情况下你只需要一个 int 你也可以使用 GLib Type Conversion Macros :

g_signal_connect (G_OBJECT (show_button[j]), "clicked",
G_CALLBACK (show), GINT_TO_POINTER(j));

然后在处理程序中使用 int i = GPOINTER_TO_INT(data)

关于c - gtk 处理程序有错误数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33565518/

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