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))的像素坐标,而不是整个电脑屏幕的坐标。
相关推荐
czq_26867194874 分钟前
Python打卡第46天
开发语言·python
宛 禾2 小时前
Qt 事件系统完全指南:从事件循环到实战避坑
qt
Evand J2 小时前
【MATLAB例程介绍】(17)永磁同步电机(PMSM)基于自适应无迹卡尔曼滤波(AUKF)的电流噪声在线估计。测量噪声协方差自适应与转速估计对比仿真
开发语言·matlab·卡尔曼滤波·无迹卡尔曼滤波·pmsm·电机滤波
BaiPeter4 小时前
ZPL文件预览
开发语言·c++
悠仁さん6 小时前
【C++】哈希表
c++·算法·散列表
Severus_black8 小时前
【C++初阶】list使用及相关实现,思路顺滑流畅!
c语言·数据结构·c++·stl·list
噢,我明白了9 小时前
JAVA中的一些基础应用知识点
java·开发语言
时间的拾荒人10 小时前
Redis 入门详解:核心特性、重要文件与全局命令实战
开发语言·redis·面试
敲上瘾10 小时前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3
码途行者11 小时前
网站的SQL 注入:从攻击原理到防御措施
开发语言·sql·php