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))的像素坐标,而不是整个电脑屏幕的坐标。
相关推荐
kaixin_learn_qt_ing6 小时前
Qt插件机制demo示例
qt
朔北之忘 Clancy7 小时前
2025 CSP-J 第二轮真题解析
c++·青少年编程·题解·noip·csp·信奥赛·noi
longlongzihan7 小时前
LeetCode 17电话号码的字母组合:回溯算法(DFS)详解
c++·算法·leetcode·深度优先
落魄实习生7 小时前
Agent Scope Java 2.x 系列【7】工具使用
java·开发语言·ai
yolo_guo7 小时前
调试mysql延迟与libevent回调实际发送回复时机问题
c++·mysql·libevent
茉莉玫瑰花茶8 小时前
GO [ 方法 ]
开发语言·后端·golang
今晚打老虎8 小时前
c++之提高A(前缀和)(第三课)
数据结构·c++·算法
狗凯之家源码网8 小时前
微博图床 PHP 系统搭建与实战应用指南
android·开发语言·php
Quz9 小时前
QML Flickable:内容滚动与边界行为
qt
Quz9 小时前
QML Flipable:卡片翻转与登录设置
qt