gpt4 book ai didi

c - Gtk,使用 user_data 传递字符串

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

我在运行时根据所选句子中的单词从 TreeView 中右键单击创建弹出式上下文菜单。代码:

//---- inpropper ------------
gboolean
menu_RELEASE(GtkWidget *menu, gpointer *user_data)
{
printf("released at %s\n", (char*)user_data);
return FALSE;
}
//---------------------------

//---- propper [SOLVED] -----
gboolean
menu_RELEASE(GtkWidget *widget, GdkEvent *event, gpointer user_data)
{
gtk_entry_set_text(GTK_ENTRY(entry1), (char*)user_data);
gtk_widget_grab_focus(entry1);
return FALSE;
}
//--------------------------

GtkWidget *create_art_menu(GtkWidget *button)
{
char *ntext;
treesel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
if (gtk_tree_selection_get_selected(treesel, &model ,&iter))
{
gtk_tree_model_get(model, &iter, cNaziv, &ntext, -1);

GtkWidget *menu, *menu_item;
menu = gtk_menu_new();

char *sresult = NULL;
sresult = strtok(ntext, " ");
while(sresult != NULL)
{
if (strlen(sresult)>1)
{
menu_item = gtk_menu_item_new_with_label(sresult);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
g_signal_connect(G_OBJECT(menu_item), "button-release-event", G_CALLBACK(menu_RELEASE), (gpointer)sresult);
}
sresult = strtok(NULL, " ");
}
gtk_menu_attach_to_widget(GTK_MENU(menu), button, NULL);
gtk_widget_show_all(menu);
return menu;
}
return 0;
}

信号被触发并正常通过,但我无法从 user_data 获取 menu_RELEASE 处理程序中的已单击菜单项字符串,我需要进一步操作。

问:如何根据显示的代码在 menu_RELEASE 处理程序中获取已发布菜单项的字符串。

最佳答案

原因是连接到button-release-event的回调签名不正确。签名应为 gboolean user_function(GtkWidget *widget,GdkEvent *event, gpointer user_data) .尝试将 gboolean menu_RELEASE(GtkWidget *menu, gpointer *user_data) 更改为 gboolean menu_RELEASE(GtkWidget *menu, GdkEvent *event, gpointer *user_data)
或者,您可以使用 g_signal_connect_swapped代替 g_signal_connect 并将 gboolean menu_RELEASE(GtkWidget *menu, gpointer *user_data) 更改为 gboolean menu_RELEASE(gpointer *user_data)
此外,请注意@Joachim Pileborg 已经提到的关于 strtok 的内容。
希望这对您有所帮助!

关于c - Gtk,使用 user_data 传递字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8517783/

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