右键GtkTreeView弹出菜单

本文介绍了如何在GtkTreeView中实现右键弹出菜单,并详细展示了相关代码片段。通过设置信号响应和回调函数,实现了Add和Delete两个菜单项的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来看下右键弹出菜单的代码(这里不提供完整代码):

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,大功告成!


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值