QContextMenuEvent 類包含上下文菜單事件的描述參數。 更多...
| 頭: |
#include <QContextMenuEvent>
|
| CMake: |
find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
|
| qmake: |
QT += gui
|
| 繼承: | QInputEvent |
| 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 |
A context menu event is sent when a user performs an action that should open a contextual menu:
The expected context menu should contain actions that are relevant to some content within the application (the "context"). In Qt, the context is at least the particular widget or Qt Quick Item that receives the QContextMenuEvent. If there is a selection, that should probably be treated as the context. The context can be further refined using QContextMenuEvent::pos () to pinpoint the content within the widget, item or selection.
Widgets can override QWidget::contextMenuEvent () to handle this event. Many widgets already do that, and have useful context menus by default. Some widgets have a function such as createStandardContextMenu () to populate the default set of actions into a QMenu , which can be customized further in your subclass and then shown.
In Qt Quick, the event can be handled via the ContextMenu attached property. Some QtQuick.Controls Controls already provide context menus by default.
Unlike most synthetic events (such as a QMouseEvent that is sent only after a QTouchEvent or QTabletEvent was not accepted), QContextMenuEvent is sent regardless of whether the original mouse or key event was already handled and accepted . This is to accommodate the Windows UI pattern of selecting some kind of items (icons, drawing elements, or cells in an Item View) using the right mouse button (clicking or dragging), and then getting a context menu as soon as you release the right mouse button. (The actions on the menu are meant to apply to the selection.) Therefore, on Windows the QContextMenuEvent is sent on mouse release; while on other platforms, it's sent on press. Qt follows the platform convention 在默認情況下。
There are also some Qt Quick Controls such as Pane that accept mouse events, and nevertheless receive a QContextMenuEvent after a mouse press or click.
If you prefer to support the press-drag-release UI pattern to open a context menu on press, and drag over a menu item to select it on release, you will need to do that by handling
QMouseEvents
directly (by overriding
virtual functions
in
QWidget
subclasses, or using
TapHandler
to open a Menu in Qt Quick); and then the QContextMenuEvent will be redundant when the
reason
() 是
Mouse
. You should
ignore
() the event in that case; but you should still ensure that the widget, custom control or application can respond to a QContextMenuEvent that
comes from
the platform-specific keyboard shortcut.
When a QContextMenuEvent is ignored , Qt attempts to deliver it to other widgets and/or Items under the position (which is usually translated from the cursor position).
此枚舉描述事件為什麼被發送的原因。
| 常量 | 值 | 描述 |
|---|---|---|
QContextMenuEvent::Mouse
|
0
|
鼠標導緻事件被發送。通常,這意味著點擊鼠標右鍵,但這從屬平颱。 |
QContextMenuEvent::Keyboard
|
1
|
鍵盤導緻此事件被發送。在 Windows,這意味著按下菜單按鈕。 |
QContextMenuEvent::Other
|
2
|
事件是通過某些其它手段發送的 (即:不通過鼠標或鍵盤)。 |
構造上下文菜單事件對象,采用將 accept (接受) 參數標誌設為 false。
The reason 參數必須是 QContextMenuEvent::Mouse or QContextMenuEvent::Keyboard .
The pos 參數指定相對於接收 Widget 的鼠標位置。 globalPos 是按絕對坐標的鼠標位置。 modifiers 保持鍵盤修飾符。
返迴事件發生時的鼠標指針全局位置。
返迴事件發生時的鼠標指針全局 X 位置。
另請參閱 globalY () 和 globalPos ().
返迴事件發生時的鼠標指針全局 Y 位置。
另請參閱 globalX () 和 globalPos ().
返迴指針相對於接收事件 Widget 的鼠標指針位置。
注意:
若
QContextMenuEvent
did not come from the right mouse button,
pos()
可以是
null
.
另請參閱 x (), y (),和 globalPos ().
返迴此上下文事件的原因。
返迴鼠標指針的 X 位置,相對於接收事件 Widget。
返迴鼠標指針的 Y 位置,相對於接收事件 Widget。