2010-05-19 25 views

Respuesta

2

No sé por qué la señal se ha eliminado pero aún así es un QWidget lo que siempre puede anular

void QWidget::contextMenuEvent (QContextMenuEvent*); 

o

void QWidget::customContextMenuRequested(const QPoint& pos); 

dependiendo de la configuración de directivas menú contextual para el widget .

+2

customContextMenuRequested() es una señal, no una función Overridable –

6

No sé lo que usted está tratando de lograr, pero se puede añadir fácilmente un menú contextual para cualquier tipo de artilugio llamando QWidget::AddAction(QAction*) con las acciones que desea agregar a su menú contextual y seleccionando la política de menú contextual

widget->setContextMenuPolicy(Qt::ActionsContextMenu); 

el widget va a preparar y mostrar el menú contextual, todo lo que tiene que hacer es conectar las acciones triggered() señales a los controladores apropiados

16

dependiendo de cómo se haya configurado el ContextMenuPolicy en el QWidget usted tiene unos pocos opciones.

Si lo ha configurado en Qt::DefaultContextMenu, simplemente anule la función protegida contextMenuEvent(QContextMenuEvent*) en QWidget. Creo que este es el predeterminado.

Si lo ha configurado en Qt::ActionsContextMenu, simplemente agregue todas sus acciones a su widget y deje que el sistema Qt se encargue de mostrar el menú contextual.

O si lo ha configurado en Qt::CustomContextMenu, necesita conectarse a la señal customContextMenuRequested() e implementar su propio controlador de menú contextual.

Todo esto está documentado en la documentación ContextMenuPolicy disponible en línea.

+0

enlaces actualizados a la descripción ContextMenuPolicy: [QT5] (http://doc.qt.io/qt-5/qwidget.html#contextMenuPolicy-prop) y [qt4] (http://doc.qt.io/qt-4.8/qwidget.html#contextMenuPolicy-prop) – avtomaton

Cuestiones relacionadas