En esta página

QMenu Class

La clase QMenu proporciona un widget de menú para su uso en barras de menú, menús contextuales y otros menús emergentes. Más...

Cabecera: #include <QMenu>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Hereda: QWidget

Propiedades

Funciones públicas

QMenu(QWidget *parent = nullptr)
QMenu(const QString &title, QWidget *parent = nullptr)
virtual ~QMenu()
QAction *actionAt(const QPoint &pt) const
QRect actionGeometry(QAction *act) const
QAction *activeAction() const
QAction *addMenu(QMenu *menu)
QMenu *addMenu(const QString &title)
QMenu *addMenu(const QIcon &icon, const QString &title)
QAction *addSection(const QString &text)
QAction *addSection(const QIcon &icon, const QString &text)
QAction *addSeparator()
void clear()
QAction *defaultAction() const
QAction *exec()
QAction *exec(const QPoint &p, QAction *action = nullptr)
void hideTearOffMenu()
QIcon icon() const
QAction *insertMenu(QAction *before, QMenu *menu)
QAction *insertSection(QAction *before, const QString &text)
QAction *insertSection(QAction *before, const QIcon &icon, const QString &text)
QAction *insertSeparator(QAction *before)
bool isEmpty() const
bool isTearOffEnabled() const
bool isTearOffMenuVisible() const
QAction *menuAction() const
void popup(const QPoint &p, QAction *atAction = nullptr)
bool separatorsCollapsible() const
void setActiveAction(QAction *act)
void setAsDockMenu()
void setDefaultAction(QAction *act)
void setIcon(const QIcon &icon)
void setSeparatorsCollapsible(bool collapse)
void setTearOffEnabled(bool)
void setTitle(const QString &title)
void setToolTipsVisible(bool visible)
void showTearOffMenu(const QPoint &pos)
void showTearOffMenu()
QString title() const
NSMenu *toNSMenu()
bool toolTipsVisible() const

Funciones públicas reimplementadas

virtual QSize sizeHint() const override

Señales

void aboutToHide()
void aboutToShow()
void hovered(QAction *action)
void triggered(QAction *action)

Miembros públicos estáticos

QAction *exec(const QList<QAction *> &actions, const QPoint &pos, QAction *at = nullptr, QWidget *parent = nullptr)
QMenu *menuInAction(const QAction *action)

Funciones protegidas

int columnCount() const
virtual void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const

Funciones protegidas reimplementadas

virtual void actionEvent(QActionEvent *e) override
virtual void changeEvent(QEvent *e) override
virtual void enterEvent(QEnterEvent *) override
virtual bool event(QEvent *e) override
virtual bool focusNextPrevChild(bool next) override
virtual void hideEvent(QHideEvent *) override
virtual void keyPressEvent(QKeyEvent *e) override
virtual void leaveEvent(QEvent *) override
virtual void mouseMoveEvent(QMouseEvent *e) override
virtual void mousePressEvent(QMouseEvent *e) override
virtual void mouseReleaseEvent(QMouseEvent *e) override
virtual void paintEvent(QPaintEvent *e) override
virtual void timerEvent(QTimerEvent *e) override
virtual void wheelEvent(QWheelEvent *e) override

Descripción detallada

Menú con varias acciones

Un widget de menú es un menú de selección. Puede ser un menú desplegable en una barra de menús o un menú contextual independiente. Los menús desplegables se muestran en la barra de menús cuando el usuario hace clic en el elemento correspondiente o pulsa la tecla de acceso directo especificada. Utilice QMenuBar::addMenu() para insertar un menú en una barra de menús. Los menús contextuales suelen invocarse mediante alguna tecla especial del teclado o haciendo clic con el botón derecho del ratón. Pueden ejecutarse de forma asíncrona con popup() o síncrona con exec(). Los menús también pueden invocarse en respuesta a la pulsación de un botón; son iguales que los menús contextuales, salvo por la forma en que se invocan.

Acciones

Un menú consiste en una lista de acciones. Las acciones se añaden con las funciones addAction(), addActions() y insertAction(). Una acción se representa verticalmente y se representa mediante QStyle. Además, las acciones pueden tener una etiqueta de texto, un icono opcional dibujado en el extremo izquierdo y una secuencia de teclas de acceso directo como "Ctrl+X".

Las acciones existentes en un menú pueden consultarse con actions().

Hay cuatro tipos de elementos de acción: separadores, acciones que muestran un submenú, widgets y acciones que realizan una acción. Los separadores se insertan con addSeparator(), los submenús con addMenu(), y todos los demás elementos se consideran elementos de acción.

Al insertar elementos de acción se suele especificar un receptor y una ranura. El receptor recibirá una notificación cada vez que el elemento se triggered(). Además, QMenu proporciona dos señales, triggered() y hovered(), que señalan el QAction que se activó desde el menú.

Puede borrar un menú con clear() y eliminar elementos de acción individuales con removeAction().

Un QMenu también puede proporcionar un menú desplegable. Un menú desplegable es una ventana de nivel superior que contiene una copia del menú. De este modo, el usuario puede "arrancar" los menús que utiliza con frecuencia y colocarlos en un lugar conveniente de la pantalla. Si desea esta funcionalidad para un menú concreto, inserte un tirador de corte con setTearOffEnabled(). Cuando utilices menús arrancables, ten en cuenta que este concepto no suele utilizarse en Microsoft Windows, por lo que algunos usuarios pueden no estar familiarizados con él. Considere la posibilidad de utilizar QToolBar en su lugar.

Los widgets pueden insertarse en los menús con la clase QWidgetAction. Las instancias de esta clase se utilizan para contener widgets, y se insertan en los menús con la sobrecarga addAction() que toma un QAction. Si el QWidgetAction dispara la señal triggered(), el menú se cerrará.

Advertencia: Para que QMenu sea visible en la pantalla, debe utilizarse exec() o popup() en lugar de show() o setVisible(). Para ocultar o desactivar el menú en la barra de menús, o en otro menú al que se haya añadido como submenú, utilice en su lugar las propiedades respectivas de menuAction().

QMenu en macOS con Qt Build Against Cocoa

QMenu sólo puede insertarse una vez en un menú/menú. Inserciones posteriores no tendrán efecto o resultarán en un elemento de menú desactivado.

Vea el ejemplo de Menús para un ejemplo de cómo usar QMenuBar y QMenu en su aplicación.

Funciones heredadas importantes: addAction(), removeAction(), clear(), addSeparator(), y addMenu().

Ver también QMenuBar y Ejemplo de Menús.

Documentación de Propiedades

icon : QIcon

Esta propiedad contiene el icono del menú

Es equivalente a la propiedad QAction::icon de menuAction().

Por defecto, si no se establece explícitamente ningún icono, esta propiedad contiene un icono nulo.

Funciones de acceso:

QIcon icon() const
void setIcon(const QIcon &icon)

separatorsCollapsible : bool

Esta propiedad indica si los separadores consecutivos deben colapsarse

Esta propiedad especifica si los separadores consecutivos en el menú deben ser colapsados visualmente a uno solo. Los separadores al principio o al final del menú también se ocultan.

Por defecto, esta propiedad es true.

Funciones de acceso:

bool separatorsCollapsible() const
void setSeparatorsCollapsible(bool collapse)

tearOffEnabled : bool

Esta propiedad indica si el menú permite ser arrancado.

Cuando es verdadera, el menú contiene un elemento especial de desgarre (a menudo mostrado como una línea discontinua en la parte superior del menú) que crea una copia del menú cuando se activa.

Esta copia "arrancada" vive en una ventana separada. Contiene los mismos elementos de menú que el menú original, a excepción del asa de corte.

Por defecto, esta propiedad es false.

Funciones de acceso:

bool isTearOffEnabled() const
void setTearOffEnabled(bool)

title : QString

Esta propiedad contiene el título del menú

Es equivalente a la propiedad QAction::text de menuAction().

Por defecto, esta propiedad contiene una cadena vacía.

Funciones de acceso:

QString title() const
void setTitle(const QString &title)

toolTipsVisible : bool

Esta propiedad indica si la información sobre herramientas de las acciones del menú debe ser visible

Esta propiedad especifica si las entradas del menú de acciones muestran su tooltip.

Por defecto, esta propiedad es false.

Funciones de acceso:

bool toolTipsVisible() const
void setToolTipsVisible(bool visible)

Documentación de funciones miembro

[explicit] QMenu::QMenu(QWidget *parent = nullptr)

Construye un menú con el padre parent.

Aunque un menú emergente es siempre un widget de nivel superior, si se le pasa un padre el menú emergente se borrará cuando ese padre sea destruido (como con cualquier otro QObject).

[explicit] QMenu::QMenu(const QString &title, QWidget *parent = nullptr)

Construye un menú con un title y un parent.

Aunque un menú emergente es siempre un widget de nivel superior, si se le pasa un padre, el menú emergente se borrará cuando se destruya ese padre (como con cualquier otro QObject).

Véase también title.

[virtual noexcept] QMenu::~QMenu()

Destruye el menú.

[signal] void QMenu::aboutToHide()

Esta señal se emite justo antes de que el menú se oculte al usuario.

Véase también aboutToShow() y hide().

[signal] void QMenu::aboutToShow()

Esta señal se emite justo antes de mostrar el menú al usuario.

Véase también aboutToHide() y show().

QAction *QMenu::actionAt(const QPoint &pt) const

Devuelve el elemento en pt; devuelve nullptr si no hay ningún elemento allí.

[override virtual protected] void QMenu::actionEvent(QActionEvent *e)

Reimplementa: QWidget::actionEvent(QActionEvent *event).

QRect QMenu::actionGeometry(QAction *act) const

Devuelve la geometría de la acción act.

QAction *QMenu::activeAction() const

Devuelve la acción resaltada actualmente, o nullptr si no hay ninguna acción resaltada.

Véase también setActiveAction().

QAction *QMenu::addMenu(QMenu *menu)

Esta función añade menu como submenú a este menú. Devuelve menu's menuAction(). Este menú no se apropia de menu.

Véase también QWidget::addAction() y QMenu::menuAction().

QMenu *QMenu::addMenu(const QString &title)

Añade un nuevo QMenu con title al menú. El menú toma posesión del menú. Devuelve el nuevo menú.

Véase también QWidget::addAction() y QMenu::menuAction().

QMenu *QMenu::addMenu(const QIcon &icon, const QString &title)

Añade un nuevo QMenu con icon y title al menú. El menú toma posesión del menú. Devuelve el nuevo menú.

Véase también QWidget::addAction() y QMenu::menuAction().

QAction *QMenu::addSection(const QString &text)

Esta cómoda función crea una nueva acción de sección, es decir, una acción con QAction::isSeparator() que devuelve true pero que también tiene text hint, y añade la nueva acción a la lista de acciones de este menú. Devuelve la acción recién creada.

La representación de la sugerencia depende del estilo y de la plataforma. Los estilos de widget pueden utilizar la información del texto en la representación de las secciones, o pueden elegir ignorarla y representar las secciones como simples separadores.

QMenu toma posesión del contenido devuelto QAction.

Véase también QWidget::addAction().

QAction *QMenu::addSection(const QIcon &icon, const QString &text)

Esta cómoda función crea una nueva acción de sección, es decir, una acción con QAction::isSeparator() que devuelve verdadero pero que también tiene las sugerencias text y icon, y añade la nueva acción a la lista de acciones de este menú. Devuelve la acción recién creada.

La representación de las sugerencias depende del estilo y de la plataforma. Los estilos de widget pueden utilizar el texto y la información de los iconos en la representación de las secciones, o pueden optar por ignorarlos y representar las secciones como simples separadores.

QMenu toma posesión del contenido devuelto QAction.

Véase también QWidget::addAction().

QAction *QMenu::addSeparator()

Esta conveniente función crea una nueva acción separadora, es decir, una acción con QAction::isSeparator() que devuelve true, y añade la nueva acción a la lista de acciones de este menú. Devuelve la acción recién creada.

QMenu toma posesión de la acción devuelta QAction.

Véase también QWidget::addAction().

[override virtual protected] void QMenu::changeEvent(QEvent *e)

Reimplementa: QWidget::changeEvent(QEvent *event).

void QMenu::clear()

Elimina todas las acciones del menú. Se eliminan las acciones que pertenecen al menú y no se muestran en ningún otro widget.

Véase también removeAction().

[protected] int QMenu::columnCount() const

Si un menú no cabe en la pantalla, se maqueta para que sí quepa. La disposición depende del estilo (por ejemplo, en Windows utilizará varias columnas).

Esta función devuelve el número de columnas necesarias.

QAction *QMenu::defaultAction() const

Devuelve la acción por defecto actual.

Véase también setDefaultAction().

[override virtual protected] void QMenu::enterEvent(QEnterEvent *)

Reimplementa: QWidget::enterEvent(QEnterEvent *event).

[override virtual protected] bool QMenu::event(QEvent *e)

Reimplementa: QWidget::event(QEvent *event).

QAction *QMenu::exec()

Ejecuta este menú de forma sincrónica.

Equivale a exec(pos()).

Devuelve el elemento QAction activado en el menú emergente o en uno de sus submenús, o nullptr si no se ha activado ningún elemento (normalmente porque el usuario ha pulsado Esc).

En la mayoría de las situaciones querrá especificar usted mismo la posición, por ejemplo, la posición actual del ratón:

exec(QCursor::pos());

o alineada a un widget:

exec(somewidget.mapToGlobal(QPoint(0,0)));

o en reacción a un QMouseEvent *e:

exec(e->globalPosition().toPoint());

QAction *QMenu::exec(const QPoint &p, QAction *action = nullptr)

Ejecuta este menú de forma sincrónica.

Despliega el menú de forma que la acción action estará en la posición global especificada p. Para traducir las coordenadas locales de un widget a coordenadas globales, utilice QWidget::mapToGlobal().

Esto devuelve el elemento QAction activado en el menú emergente o en uno de sus submenús, o nullptr si no se ha activado ningún elemento (normalmente porque el usuario ha pulsado Esc).

Tenga en cuenta que todas las señales se emiten como de costumbre. Si conecta un QAction a una ranura y llama a exec() del menú, obtendrá el resultado tanto a través de la conexión señal-ranura como en el valor de retorno de exec().

El uso común es posicionar el menú en la posición actual del ratón:

exec(QCursor::pos());

o alineado a un widget:

exec(somewidget.mapToGlobal(QPoint(0, 0)));

o en reacción a un QMouseEvent *e:

exec(e->globalPosition().toPoint());

Al posicionar un menú con exec() o popup(), tenga en cuenta que no puede confiar en la posición actual del menú size(). Por razones de rendimiento, el menú adapta su tamaño sólo cuando es necesario. Así que en muchos casos, el tamaño antes y después de la función es diferente. En su lugar, utilice sizeHint(), que calcula el tamaño adecuado en función del contenido actual del menú.

Se trata de una función sobrecargada.

Véase también popup() y QWidget::mapToGlobal().

[static] QAction *QMenu::exec(const QList<QAction *> &actions, const QPoint &pos, QAction *at = nullptr, QWidget *parent = nullptr)

Ejecuta un menú de forma sincrónica.

Las acciones del menú se especifican mediante la lista actions. El menú aparecerá de forma que la acción especificada, at, aparezca en la posición global pos. Si no se especifica at, el menú aparecerá en la posición pos. parent es el widget padre del menú; especificar el padre proporcionará contexto cuando pos por sí solo no sea suficiente para decidir dónde debe ir el menú (por ejemplo, con múltiples escritorios o cuando el padre esté incrustado en QGraphicsView).

La función devuelve el elemento QAction activado en el menú emergente o en uno de sus submenús, o nullptr si no se ha activado ningún elemento (normalmente porque el usuario ha pulsado Esc).

Esto equivale a

QMenu menu;
QAction *at = actions[0]; // Assumes actions is not empty
for (QAction *a : std::as_const(actions))
    menu.addAction(a);
menu.exec(pos, at);

Esta es una función sobrecargada.

Véase también popup() y QWidget::mapToGlobal().

[override virtual protected] bool QMenu::focusNextPrevChild(bool next)

Reimplementa: QWidget::focusNextPrevChild(bool next).

[override virtual protected] void QMenu::hideEvent(QHideEvent *)

Reimplementa: QWidget::hideEvent(QHideEvent *event).

void QMenu::hideTearOffMenu()

Esta función ocultará forzosamente el menú arrancado haciéndolo desaparecer del escritorio del usuario.

Véase también showTearOffMenu(), isTearOffMenuVisible(), y isTearOffEnabled().

[signal] void QMenu::hovered(QAction *action)

Esta señal se emite cuando se resalta una acción del menú; action es la acción que provocó la emisión de la señal.

A menudo se utiliza para actualizar la información de estado.

Véase también triggered() y QAction::hovered().

[virtual protected] void QMenu::initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const

Inicializa option con los valores de este menú y la información de action. Este método es útil para las subclases cuando necesitan un QStyleOptionMenuItem, pero no quieren rellenar toda la información ellos mismos.

Véase también QStyleOption::initFrom() y QMenuBar::initStyleOption().

QAction *QMenu::insertMenu(QAction *before, QMenu *menu)

Esta función de conveniencia inserta menu antes de la acción before y devuelve los menús menuAction().

Véase también QWidget::insertAction() y addMenu().

QAction *QMenu::insertSection(QAction *before, const QString &text)

Esta función de conveniencia crea una nueva acción de título, es decir, una acción con QAction::isSeparator() que devuelve true pero que también tiene text hint. La función inserta la acción recién creada en la lista de acciones de este menú antes de la acción before y la devuelve.

La representación de la sugerencia depende del estilo y de la plataforma. Los estilos de widget pueden utilizar la información del texto en la representación de las secciones, o pueden elegir ignorarla y representar las secciones como simples separadores.

QMenu toma posesión del contenido devuelto QAction.

Véase también QWidget::insertAction() y addSection().

QAction *QMenu::insertSection(QAction *before, const QIcon &icon, const QString &text)

Esta función de conveniencia crea una nueva acción de título, es decir, una acción con QAction::isSeparator() que devuelve true pero que también tiene las sugerencias text y icon. La función inserta la acción recién creada en la lista de acciones de este menú antes de la acción before y la devuelve.

La representación de las sugerencias depende del estilo y de la plataforma. Los estilos de widget pueden utilizar el texto y la información de los iconos en la representación de las secciones, o pueden elegir ignorarlos y representar las secciones como simples separadores.

QMenu toma posesión del contenido devuelto QAction.

Véase también QWidget::insertAction() y addSection().

QAction *QMenu::insertSeparator(QAction *before)

Esta práctica función crea una nueva acción separadora, es decir, una acción con QAction::isSeparator() que devuelve true. La función inserta la acción recién creada en la lista de acciones de este menú antes de la acción before y la devuelve.

QMenu se apropia de la acción devuelta QAction.

Véase también QWidget::insertAction() y addSeparator().

bool QMenu::isEmpty() const

Devuelve true si no hay acciones visibles insertadas en el menú, false en caso contrario.

Véase también QWidget::actions().

bool QMenu::isTearOffMenuVisible() const

Cuando se arranca un menú se muestra un segundo menú para mostrar el contenido del menú en una nueva ventana. Cuando el menú está en este modo y el menú es visible devuelve true; en caso contrario false.

Véase también showTearOffMenu(), hideTearOffMenu(), y isTearOffEnabled().

[override virtual protected] void QMenu::keyPressEvent(QKeyEvent *e)

Reimplementa: QWidget::keyPressEvent(QKeyEvent *event).

[override virtual protected] void QMenu::leaveEvent(QEvent *)

Reimplementa: QWidget::leaveEvent(QEvent *event).

Devuelve la acción asociada a este menú.

Devuelve el menú contenido por action, o nullptr si action no contiene ningún menú.

En las aplicaciones de widgets, las acciones que contienen menús pueden utilizarse para crear elementos de menú con submenús, o insertarse en barras de herramientas para crear botones con menús emergentes.

[override virtual protected] void QMenu::mouseMoveEvent(QMouseEvent *e)

Reimplementa: QWidget::mouseMoveEvent(QMouseEvent *event).

[override virtual protected] void QMenu::mousePressEvent(QMouseEvent *e)

Reimplementa: QWidget::mousePressEvent(QMouseEvent *event).

[override virtual protected] void QMenu::mouseReleaseEvent(QMouseEvent *e)

Reimplementa: QWidget::mouseReleaseEvent(QMouseEvent *event).

[override virtual protected] void QMenu::paintEvent(QPaintEvent *e)

Reimplementa: QWidget::paintEvent(QPaintEvent *event).

Muestra el menú de forma que la acción atAction se sitúe en la posición global especificada p. Para traducir las coordenadas locales de un widget a coordenadas globales, utilice QWidget::mapToGlobal().

Al posicionar un menú con exec() o popup(), tenga en cuenta que no puede confiar en la posición actual del menú size(). Por razones de rendimiento, el menú adapta su tamaño sólo cuando es necesario, por lo que en muchos casos, el tamaño antes y después de la presentación es diferente. En su lugar, utilice sizeHint(), que calcula el tamaño adecuado en función del contenido actual del menú.

Véase también QWidget::mapToGlobal() y exec().

void QMenu::setActiveAction(QAction *act)

Establece la acción resaltada actualmente en act.

Véase también activeAction().

void QMenu::setAsDockMenu()

Configura este menú para que sea el menú del dock disponible al hacer clic en el icono del dock de la aplicación. Disponible solo en macOS.

void QMenu::setDefaultAction(QAction *act)

Esto establece la acción por defecto en act. La acción por defecto puede tener una señal visual, dependiendo de la QStyle actual. Una acción por defecto suele indicar lo que ocurrirá por defecto cuando se produzca una caída.

Véase también defaultAction().

void QMenu::showTearOffMenu(const QPoint &pos)

Esta función mostrará forzosamente el menú arrancado haciéndolo aparecer en el escritorio del usuario en la posición global especificada pos.

Véase también hideTearOffMenu(), isTearOffMenuVisible(), y isTearOffEnabled().

void QMenu::showTearOffMenu()

Esta función mostrará forzosamente el menú arrancado haciéndolo aparecer en el escritorio del usuario bajo el cursor del ratón.

Esta es una función sobrecargada.

Ver también hideTearOffMenu(), isTearOffMenuVisible(), y isTearOffEnabled().

[override virtual] QSize QMenu::sizeHint() const

Reimplementa una función de acceso para la propiedad: QWidget::sizeHint.

[override virtual protected] void QMenu::timerEvent(QTimerEvent *e)

Reimplementa: QObject::timerEvent(QTimerEvent *event).

NSMenu *QMenu::toNSMenu()

Devuelve el NSMenu nativo de este menú. Disponible sólo en macOS.

Nota: Qt establece el delegado en el menú nativo. Si necesitas establecer tu propio delegado, asegúrate de guardar el original y reenviar cualquier llamada a él.

[signal] void QMenu::triggered(QAction *action)

Esta señal se emite cuando se activa una acción de este menú.

action es la acción que ha provocado la emisión de la señal.

Normalmente, se conecta la señal triggered() de cada acción de menú a su propia ranura personalizada, pero a veces querrá conectar varias acciones a una sola ranura, por ejemplo, cuando tenga un grupo de acciones estrechamente relacionadas, como "justificar a la izquierda", "centrar", "justificar a la derecha".

Nota: Esta señal se emite para el menú principal de una jerarquía. Por lo tanto, sólo el menú principal necesita estar conectado a una ranura; los submenús no necesitan estar conectados.

Véase también hovered() y QAction::triggered().

[override virtual protected] void QMenu::wheelEvent(QWheelEvent *e)

Reimplementa: QWidget::wheelEvent(QWheelEvent *event).

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