QContextMenuEvent Class
QContextMenuEvent 类包含描述上下文菜单事件的参数。更多内容...
| 头文件: | #include <QContextMenuEvent> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| 继承自: | QInputEvent |
- 所有成员列表,包括继承的成员
- 已弃用的成员
- QContextMenuEvent 属于事件类。
公共类型
| enum | Reason { Mouse, Keyboard, Other } |
公共函数
| QContextMenuEvent(QContextMenuEvent::Reason reason, const QPoint &pos, const QPoint &globalPos, Qt::KeyboardModifiers modifiers = Qt::NoModifier) | |
| const QPoint & | globalPos() const |
| int | globalX() const |
| int | globalY() const |
| const QPoint & | pos() const |
| QContextMenuEvent::Reason | reason() const |
| int | x() const |
| int | y() const |
受保护函数
| QContextMenuEvent(QContextMenuEvent &&) | |
| QContextMenuEvent & | operator=(QContextMenuEvent &&) |
| QContextMenuEvent & | operator=(const QContextMenuEvent &other) |
详细说明
当用户执行应打开上下文菜单的操作时,会发送一个上下文菜单事件:
- 单击鼠标右键
- 按下专用的键盘菜单键(如果键盘有此键,例如标准 104 键 PC 键盘上的菜单键)
- 按下其他键盘快捷键(例如 macOS 15 及更高版本中的默认快捷键“Ctrl+Return”)
预期的上下文菜单应包含与应用程序内某些内容(即“上下文”)相关的actions 。 在 Qt 中,上下文至少包括接收 QContextMenuEvent 的特定widget 或Qt Quick Item 。如果存在选区,则通常应将其视为上下文。可通过调用QContextMenuEvent::pos() 进一步细化上下文,以精确定位小部件、项目或选区内的内容。
控件可以重写QWidget::contextMenuEvent() 方法来处理此事件。许多控件已经这样做了,并且默认提供了有用的上下文菜单。有些控件还提供诸如createStandardContextMenu() 之类的函数,用于将默认操作集填充到QMenu 中,您可以在子类中进一步自定义这些操作,然后将其显示出来。
在 `Qt Quick` 中,可通过 `ContextMenu ` 附加属性来处理该事件。某些 `QtQuick.Controls ` 控件默认已提供上下文菜单。
与大多数合成事件(例如,只有在QTouchEvent 或QTabletEvent 未被接受后才会发送的QMouseEvent )不同,QContextMenuEvent的发送与原始鼠标或键盘事件是否已被处理无关,且accepted 。 这是为了适应 Windows 用户界面的操作模式:使用鼠标右键(单击或拖动)选择某些项目(图标、绘图元素或 ItemView 中的单元格),然后在释放鼠标右键的瞬间立即显示上下文菜单。(菜单中的操作旨在应用于所选内容。) 因此,在 Windows 上,QContextMenuEvent 是在鼠标释放时发送的;而在其他平台上,则是在按下鼠标时发送的。Qt 默认遵循platform convention 中的规范。
此外,还有一些Qt Quick Controls (例如Pane )虽然接受鼠标事件,但在按下或单击鼠标后仍会接收QContextMenuEvent。
若您希望支持“按下-拖动-释放”的用户界面模式(即按下鼠标时打开上下文菜单,将鼠标拖动至菜单项上并在释放时选中该项),则需要通过直接处理QMouseEvents 来实现(在QWidget 的子类中重写virtual functions ,或在Qt Quick 中使用TapHandler 打开Menu ); 此时,当reason() 为Mouse 时,QContextMenuEvent 将变得多余。在这种情况下,您应调用ignore() 处理该事件;但仍需确保小部件、自定义控件或应用程序能够响应包含comes from 平台特定键盘快捷键的 QContextMenuEvent。
当 QContextMenuEvent 被ignored 时,Qt 会尝试将其传递给position (通常由光标位置转换而来)下的其他小部件和/或项目。
成员类型文档
enum QContextMenuEvent::Reason
此枚举描述了发送该事件的原因。
| 常量 | 值 | 描述 |
|---|---|---|
QContextMenuEvent::Mouse | 0 | 鼠标触发了该事件的发送。通常这意味着右键被点击,但这取决于平台。 |
QContextMenuEvent::Keyboard | 1 | 键盘触发了该事件。在 Windows 上,这意味着菜单键被按下。 |
QContextMenuEvent::Other | 2 | 该事件通过其他方式触发(即非通过鼠标或键盘)。 |
成员函数文档
QContextMenuEvent::QContextMenuEvent(QContextMenuEvent::Reason reason, const QPoint &pos, const QPoint &globalPos, Qt::KeyboardModifiers modifiers = Qt::NoModifier)
创建一个上下文菜单事件对象,并将 accept 参数标志设置为 false。
reason 参数必须为QContextMenuEvent::Mouse 或QContextMenuEvent::Keyboard 。
pos 参数指定了相对于接收小部件的鼠标位置。globalPos 表示鼠标在绝对坐标系中的位置。modifiers 包含键盘修饰键。
[protected delete] QContextMenuEvent::QContextMenuEvent(QContextMenuEvent &&)
通过移动构造一个QContextMenuEvent 实例。该函数已被删除。
const QPoint &QContextMenuEvent::globalPos() const
返回事件发生时鼠标指针的全球位置。
int QContextMenuEvent::globalX() const
返回事件发生时鼠标指针的全球 x 坐标。
int QContextMenuEvent::globalY() const
返回事件发生时鼠标指针的全局 y 坐标。
const QPoint &QContextMenuEvent::pos() const
返回鼠标指针相对于接收该事件的控件的位置。
注意:如果 QContextMenuEvent 事件并非由鼠标右键触发,则pos() 可能为null 。
QContextMenuEvent::Reason QContextMenuEvent::reason() const
返回此上下文事件的原因。
int QContextMenuEvent::x() const
返回鼠标指针的 x 坐标,该坐标相对于接收该事件的控件。
int QContextMenuEvent::y() const
返回鼠标指针的 y 坐标,该坐标相对于接收该事件的小部件。
[protected delete] QContextMenuEvent &QContextMenuEvent::operator=(QContextMenuEvent &&)
将other 按移动赋值方式赋值给此QContextMenuEvent 实例。该函数已被删除。
[noexcept protected default] QContextMenuEvent &QContextMenuEvent::operator=(const QContextMenuEvent &other)
将other 复制并赋值给此QContextMenuEvent 实例。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.