QTreewidget右键菜单功能实现

QTreewidget有一个信号继承自QWidget的信号void QWidget::customContextMenuRequested(const QPoint &pos);我们来看看官方介绍:
在这里插入图片描述
简单翻译一下:当widget的 contextMenuPolicy即上下文菜单属性是 Qt::CustomContextMenu,并且用户已request widget上的上下文菜单时(也就是点了右键),会发出此信号。位置 pos 是widget接收到的上下文菜单事件的位置(也就是鼠标位置)。
所以我们要做的就是
1.设置contextMenuPolicy属性为CustomContextMenu
2.绑定信号并实现槽函数;
直接在界面设置。右键转到槽,设置contextMenuPolicy属性
在这里插入图片描述
在这里插入图片描述
当右键了treeWidget的QTreeWidgetItem节点时才弹出菜单

void MainWindow::on_treeWidget_customContextMenuRequested(const QPoint &pos)
{
    QTreeWidgetItem* curItem=ui->treeWidget->itemAt(pos);
   if(curItem !=nullptr)
    {
        QMenu *popMenu = new QMenu(this);
        QAction *actionNew = new QAction("新增(N)",this);

        connect(actionNew, &QAction::triggered, this, &MainWindow::deal_actionNew_triggered);
        popMenu->addAction(actionNew);
        popMenu->exec(QCursor::pos());
        delete popMenu;
        delete actionNew;
    }
}

效果如下
在这里插入图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤为 `QTreeWidget` 添加右键菜单: 1. 创建右键菜单 `QMenu` 对象 ```python menu = QMenu(self) ``` 2. 向菜单中添加菜单项 `QAction` 对象 ```python action = QAction("菜单项", self) menu.addAction(action) ``` 3. 连接菜单项的 `triggered` 信号到槽函数 ```python action.triggered.connect(self.on_menu_item_clicked) ``` 4. 在 `QTreeWidget` 上注册右键菜单,并在鼠标右键按下事件中显示菜单 ```python def contextMenuEvent(self, event): if self.itemAt(event.pos()) is not None: menu.exec_(self.mapToGlobal(event.pos())) ``` 完整代码示例: ```python from PyQt5.QtWidgets import QWidget, QTreeWidget, QTreeWidgetItem, QMenu, QAction class MyWidget(QWidget): def __init__(self): super().__init__() self.tree_widget = QTreeWidget(self) self.tree_widget.setHeaderLabels(["Name", "Value"]) # 添加根节点 root = QTreeWidgetItem(self.tree_widget, ["Root", ""]) # 添加子节点 child1 = QTreeWidgetItem(root, ["Child1", "Value1"]) child2 = QTreeWidgetItem(root, ["Child2", "Value2"]) # 注册右键菜单 self.tree_widget.setContextMenuPolicy(Qt.CustomContextMenu) self.tree_widget.customContextMenuRequested.connect(self.show_context_menu) def show_context_menu(self, pos): item = self.tree_widget.itemAt(pos) if item is not None: menu = QMenu(self) action = QAction("菜单项", self) action.triggered.connect(self.on_menu_item_clicked) menu.addAction(action) menu.exec_(self.mapToGlobal(pos)) def on_menu_item_clicked(self): print("菜单项被点击了") ``` 在上述示例中,我们为 `QTreeWidget` 的根节点和子节点添加了右键菜单,并在菜单项被点击时打印一条消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值