2012-02-16 14 views
7

Tengo un elemento Qation en un menú para eliminar elementos seleccionados en una de mis vistas. Aquí es cómo crear la acción:El atajo de QAction no funciona siempre

deleteAct = new QAction(tr("Delete Selected"), this); 
deleteAct->setShortcut(QKeySequence::Delete); 
connect(deleteAct, SIGNAL(triggered()), this, SLOT(deleteSelected())); 

puedo configurar un atajo de teclado (Tecla Suprimir), que deben dar lugar a la acción delectAct. Funciona la mayor parte del tiempo, pero en algunos puntos deja de funcionar ... ¿Alguien sabe por qué el atajo dejaría de funcionar?

Nota: la acción todavía funciona si la disparo desde el elemento del menú. Es sólo el acceso directo que no lo hace ...

Respuesta

18

Es necesario añadir la acción de un widget, ya que es el widget que será escuchando eventos clave. Suponiendo "este" es un MainWindow, sólo tiene que hacer

addAction(deleteAct); 

Tenga en cuenta que puede agregar la misma acción a varios widgets (que es el punto central del concepto de acción separado). Por lo tanto, está bien agregarlo a la ventana principal y a un menú.

+0

+1 Mis accesos directos del menú contextual no funcionaron como yo quería hasta que también he agregado acciones a la ventana principal. – rendon

+0

Además, action-> setShortcutContext (...); tiene que ser configurado, ver user362638 respuesta. – Tob

+0

No necesariamente; el contexto de acceso directo predeterminado es Qt :: WindowShortcut, que es lo que desea en el ejemplo del póster original. No desea que la tecla Eliminar elimine el elemento seleccionado en la ventana A cuando presiona Eliminar en la ventana B, seguramente. Qt :: ApplicationShortcut tiene sentido para los accesos directos de toda la aplicación (es decir, los accesos directos que deberían funcionar desde cualquier ventana de la aplicación). –

6

Intente cambiar el shortcut context de la acción, por ejemplo:

deleteAct->setShortcutContext(Qt::ApplicationShortcut); 
0

Sin ver el código completo, me atrevo a adivinar que en algún lugar se habilita/deshabilita. Asegúrate de que el atajo sea golpeado en el constructor y no 'desactivado' en otro lugar debido a una configuración tal vez.

Cuestiones relacionadas