QContextMenuEvent Class
QContextMenuEvent 类包含描述上下文菜单事件的参数。更多
头文件: | #include <QContextMenuEvent> |
CMake.QContextMenuEvent | 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 |
详细说明
当用户执行应打开上下文菜单的操作时,将发送上下文菜单事件:
- 单击鼠标右键
- 按专用键盘菜单键(如果键盘上有菜单键,例如标准 104 键 PC 键盘上的菜单键)
- 按其他键盘快捷键(如 macOS 15 及更新版本中默认的 "Ctrl+Return")。
预期的上下文菜单应包含与应用程序中某些内容("上下文")相关的actions 。在 Qt XML 中,上下文至少是接收 QContextMenuEvent 的特定widget 或Qt Quick Item 。如果有选择,则可能应将其视为上下文。上下文可以通过QContextMenuEvent::pos() 进一步细化,以精确定位部件、项目或选区中的内容。
部件可以覆盖QWidget::contextMenuEvent() 来处理该事件。许多部件已经这样做了,默认情况下都有有用的上下文菜单。有些 widget 具有createStandardContextMenu() 等函数,可将默认操作集填充到QMenu 中,您可以在子类中对其进行进一步定制,然后显示出来。
在Qt Quick 中,可通过 ContextMenu 附加属性处理该事件。一些 QtQuick.Controls 控件已经默认提供上下文菜单。
与大多数合成事件(如QMouseEvent ,仅在QTouchEvent 或QTabletEvent 未被接受后发送)不同,QContextMenuEvent 不管原始鼠标或按键事件是否已被处理和accepted ,都会被发送。这是为了适应 Windows UI 模式,即使用鼠标右键(单击或拖动)选择某种项目(图标、绘图元素或项目视图中的单元格),然后在松开鼠标右键后立即获得上下文菜单。(因此,在 Windows 平台上,QContextMenuEvent 在鼠标释放时发送;而在其他平台上,它在按下时发送。Qt 默认遵循platform convention 。
还有一些Qt Quick Controls (如 Pane)接受鼠标事件,但在按下或点击鼠标后仍会收到 QContextMenuEvent。
如果您希望支持 "按下-拖动-释放 "的 UI 模式,即按下时打开上下文菜单,释放时拖动菜单项以选择该菜单项,则需要直接处理QMouseEvents (在QWidget 子类中覆盖virtual functions ,或在Qt Quick 中使用TapHandler 打开菜单);然后,当reason() 是Mouse
时,QContextMenuEvent 将是多余的。在这种情况下,您应ignore() 该事件;但仍应确保窗口小部件、自定义控件或应用程序能够响应comes from 平台特定键盘快捷键的 QContextMenuEvent。
当一个 QContextMenuEvent 被ignored 时,Qt XML 会尝试将其传递给position 下的其他 widget 和/或 Items(通常是从光标位置翻译过来的)。
成员类型文档
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)
构造一个上下文菜单事件对象,并将接受参数标志设置为 false。
reason 参数必须是QContextMenuEvent::Mouse 或QContextMenuEvent::Keyboard 。
pos 参数指定相对于接收 widget 的鼠标位置。globalPos 是以绝对坐标表示的鼠标位置。modifiers 包含键盘修改器。
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 位置。
© 2025 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.