先来看下右键弹出菜单的代码(这里不提供完整代码):
1、g_signal_connect(G_OBJECT(tree), "button-release-event", G_CALLBACK(popmenu), NULL);
以上是对GtkTreeView设置消息响应,其中tree是GtkTreeView。
2、static void
popmenu(GtkWidget *widget, GdkEventButton *event, gpointer data)
{
GtkWidget *menu;
GtkWidget *same_level, *child_level, *delete_menu;
if(event -> type == GDK_BUTTON_RELEASE && event -> button == 3)
{
menu = gtk_menu_new();
child_level = gtk_menu_item_new_with_label("Add");
g_signal_connect(G_OBJECT(child_level), "activate", G_CALLBACK(add_node_child), widget);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), child_level);
delete_menu = gtk_menu_item_new_with_label("Delete");
g_signal_connect(G_OBJECT(delete_menu), "activate", G_CALLBACK(delete_node), widget);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), delete_menu);
gtk_widget_show_all(GTK_WIDGET(menu));
gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, 1);
return TRUE;
}
return FALSE;
}
以上是右键GtkTreeView的回调函数,其中会弹出2个菜单:Add和Delete。
3、然后为两个菜单设置回调函数即可。
在这里,发现了一个问题,我原本是在VS中编写的,在VS中很正常,然后再拿到Wireshark中,结果不行,其实这段代码是在网上找的,结果是上面红色代码出了问题:
应该是 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time);
OK,大功告成!
本文介绍了如何在GtkTreeView中实现右键弹出菜单,并详细展示了相关代码片段。通过设置信号响应和回调函数,实现了Add和Delete两个菜单项的功能。
7

被折叠的 条评论
为什么被折叠?



