En esta página

QContextMenuEvent Class

La clase QContextMenuEvent contiene parámetros que describen un evento de menú contextual. Más...

Cabecera: #include <QContextMenuEvent>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Hereda: QInputEvent

Tipos Públicos

enum Reason { Mouse, Keyboard, Other }

Funciones Públicas

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

Descripción Detallada

Un evento de menú contextual se envía cuando un usuario realiza una acción que debería abrir un menú contextual:

  • pulsando el botón derecho del ratón
  • pulsando una tecla de menú dedicada del teclado (si el teclado tiene una, como la tecla de menú en los teclados PC estándar de 104 teclas)
  • pulsando algún otro atajo de teclado (como "Ctrl+Return" por defecto en macOS 15 y posteriores)

El menú contextual esperado debería contener actions que son relevantes para algún contenido dentro de la aplicación (el "contexto"). En Qt, el contexto es al menos el widget o Qt Quick Item particular que recibe el QContextMenuEvent. Si hay una selección, probablemente debería ser tratada como el contexto. El contexto se puede refinar aún más utilizando QContextMenuEvent::pos() para señalar el contenido dentro del widget, elemento o selección.

Los widgets pueden anular QWidget::contextMenuEvent() para manejar este evento. Muchos widgets ya lo hacen, y tienen útiles menús contextuales por defecto. Algunos widgets tienen una función como createStandardContextMenu() para rellenar el conjunto de acciones por defecto en un QMenu, que puede personalizarse más en tu subclase y luego mostrarse.

En Qt Quick, el evento puede ser manejado a través de la propiedad adjunta ContextMenu. Algunos controles de QtQuick.Controls ya proporcionan menús contextuales por defecto.

A diferencia de la mayoría de los eventos sintéticos (como un QMouseEvent que se envía sólo después de que un QTouchEvent o QTabletEvent no fue aceptado), QContextMenuEvent se envía independientemente de si el evento original de ratón o tecla ya fue manejado y accepted. Esto es para acomodar el patrón de Windows UI de seleccionar algún tipo de ítems (iconos, elementos de dibujo, o celdas en una Vista de Ítems) usando el botón derecho del ratón (haciendo click o arrastrando), y luego obtener un menú contextual tan pronto como se suelta el botón derecho del ratón. (Las acciones del menú se aplican a la selección.) Por lo tanto, en Windows el QContextMenuEvent se envía al soltar el ratón; mientras que en otras plataformas, se envía al pulsarlo. Qt sigue el platform convention por defecto.

También hay algunos Qt Quick Controls como Pane que aceptan eventos del ratón, y sin embargo reciben un QContextMenuEvent después de una pulsación o clic del ratón.

Si prefieres soportar el patrón UI pulsar-arrastrar-soltar para abrir un menú contextual al pulsar, y arrastrar sobre un elemento de menú para seleccionarlo al soltar, tendrás que hacerlo manejando QMouseEvents directamente (anulando virtual functions en subclases de QWidget, o usando TapHandler para abrir un Menu en Qt Quick); y entonces el QContextMenuEvent será redundante cuando el reason() sea Mouse. Deberías ignore() el evento en ese caso; pero aún así deberías asegurarte de que el widget, control personalizado o aplicación puede responder a un QContextMenuEvent que comes from el atajo de teclado específico de la plataforma.

Cuando un QContextMenuEvent es ignored, Qt intenta entregarlo a otros widgets y/o Items bajo el position (que normalmente se traduce desde la posición del cursor).

Documentación de Tipos de Miembros

enum QContextMenuEvent::Reason

Este enum describe la razón por la que se envió el evento.

ConstanteValorDescripción
QContextMenuEvent::Mouse0El ratón causó el envío del evento. Normalmente esto significa que se pulsó el botón derecho del ratón, pero depende de la plataforma.
QContextMenuEvent::Keyboard1El teclado causó el envío de este evento. En Windows, significa que se ha pulsado el botón de menú.
QContextMenuEvent::Other2El evento fue enviado por algún otro medio (es decir, no por el ratón o el teclado).

Documentación de las funciones miembro

QContextMenuEvent::QContextMenuEvent(QContextMenuEvent::Reason reason, const QPoint &pos, const QPoint &globalPos, Qt::KeyboardModifiers modifiers = Qt::NoModifier)

Construye un objeto de evento de menú contextual con el indicador del parámetro accept puesto a false.

El parámetro reason debe ser QContextMenuEvent::Mouse o QContextMenuEvent::Keyboard.

El parámetro pos especifica la posición del ratón relativa al widget receptor. globalPos es la posición del ratón en coordenadas absolutas. El parámetro modifiers contiene los modificadores de teclado.

const QPoint &QContextMenuEvent::globalPos() const

Devuelve la posición global del puntero del ratón en el momento del evento.

Véase también x(), y() y pos().

int QContextMenuEvent::globalX() const

Devuelve la posición global x del puntero del ratón en el momento del evento.

Véase también globalY() y globalPos().

int QContextMenuEvent::globalY() const

Devuelve la posición y global del puntero del ratón en el momento del evento.

Véase también globalX() y globalPos().

const QPoint &QContextMenuEvent::pos() const

Devuelve la posición del puntero del ratón relativa al widget que recibió el evento.

Nota: Si el QContextMenuEvent no proviene del botón derecho del ratón, pos() puede ser null.

Véase también x(), y(), y globalPos().

QContextMenuEvent::Reason QContextMenuEvent::reason() const

Devuelve el motivo de este evento de contexto.

int QContextMenuEvent::x() const

Devuelve la posición x del puntero del ratón, relativa al widget que recibió el evento.

Véase también y() y pos().

int QContextMenuEvent::y() const

Devuelve la posición y del puntero del ratón, relativa al widget que recibió el evento.

Véase también x() y pos().

© 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.