Qt 右键自定义菜单的实现

右键菜单的实现

  • setContextMenuPolicy(Qt::CustomContextMenu) :负责授权(打开自定义右键菜单的机制开关)
  • &QListWidget::customContextMenuRequested :负责通知与传参 (右键按下时,把相对坐标 pos 发送出来)
  • itemAt(pos) + mapToGlobal(pos) :负责定位与呈现(相对坐标找数据,绝对坐标弹菜单)

setContextMenuPolicy()

说明

  • 说明:QWidget 提供的接口
  • 作用:告诉 Qt 当用户在当前控件上触发右键菜单(或按下菜单键)时,应该采用哪套策略来响应

策略

  • Qt::DefaultContextMenu(默认值):

    • 控件使用自己默认的右键菜单(比如 QLineEdit 默认弹出撤销、复制、粘贴)。

    • 需要重写虚函数 contextMenuEvent(QContextMenuEvent *event) 才能自定义菜单。

  • Qt::CustomContextMenu(当前使用的策略):

    • 完全交出控制权:控件放弃默认行为,改由开发者自定义。
    • 激活信号机制 :只有设为该策略,Qt 内部捕获到右键点击时,才会主动发射 customContextMenuRequested 信号。
  • Qt::NoContextMenu:

    • 禁用右键菜单,用户怎么点右键都没反应。
  • Qt::ActionsContextMenu:

    • 将 QWidget::addAction() 添加的所有 QAction 自动组合成右键菜单弹出(适合极其简单的菜单)。

&QListWidget::customContextMenuRequested

说明

  • 说明:QWidget 继承给所有子控件(包括 QListWidget)的原生信号(Signal)
  • 触发条件:当控件策略为 Qt::CustomContextMenu,且用户在控件区域内按下右键(或触发右键菜单快捷键)时
  • 参数传递 (const QPoint &pos) :信号在发射时,会携带一个类型为 QPoint 的参数 pos。
  • 注意 : pos 是相对坐标 (Local Coordinates),即鼠标点击位置相对于控件左上角((0,0))的像素坐标,而不是整个电脑屏幕的坐标。
相关推荐
http阿拉丁神猫4 小时前
Go语言入门笔记:从基础到开发环境搭建(二)
开发语言·笔记·golang
不会就选b5 小时前
C++补充部分(一)--lambda 表达式
开发语言·c++
Pniubi8 小时前
HashMap的扩容和树化边界
java·开发语言
gCode Teacher 格码致知9 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
发量惊人的中年网工10 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
下页、再停留10 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
ShineWinsu10 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
zhanghaha131411 小时前
Qt 类本质就是 C++ 的类,只是 Qt 框架扩展了一套【QObject 对象模型】
qt
益莱储中国12 小时前
深度解析:RF 实验室从 5G迈向 6G 的过程中保持技术领先与设备升级的路径
开发语言·php
丰色木夕12 小时前
Ubuntu22.04下源码编译安装USD-Brep
c++·ubuntu·nvidia·usd-brep