右键菜单的实现
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))的像素坐标,而不是整个电脑屏幕的坐标。