2012-02-16 18 views
7

Ho un Qaction su una voce di menu per l'eliminazione di elementi selezionati in una delle mie viste. Ecco come genero l'azione:Il collegamento di scelta rapida non funziona sempre

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

a configurare una scorciatoia da tastiera (Delete Key), che dovrebbe far scattare l'azione delectAct. Funziona la maggior parte del tempo ma in alcuni punti smette di funzionare ... Qualcuno sa perché la scorciatoia smetterebbe di funzionare?

Nota: l'azione funziona ancora se la si attiva dalla voce di menu. Il suo solo il collegamento che non è così ...

risposta

18

È necessario aggiungere l'azione a un widget, dal momento che è il widget che sarà ascoltando gli eventi chiave. Supponendo "questo" è un MainWindow, è sufficiente fare

addAction(deleteAct); 

Si noti che è possibile aggiungere la stessa azione a più widget (che è il punto del concetto di azione separati). Quindi va bene aggiungerlo alla finestra principale e in un menu.

+0

+1 Le scorciatoie del menu di scelta rapida non hanno funzionato come volevo finché non avessi aggiunto anche le azioni della finestra principale. – rendon

+0

Inoltre, action-> setShortcutContext (...); deve essere impostato, vedere la risposta dell'utente 362638. – Tob

+0

Non necessariamente; il contesto di scelta rapida predefinito è Qt :: WindowShortcut, che è ciò che si desidera nell'esempio del poster originale. Non vuoi il tasto Canc per eliminare l'elemento selezionato nella finestra A quando premi Elimina nella finestra B, sicuramente. Qt :: ApplicationShortcut ha senso per scorciatoie a livello di applicazione (ovvero scorciatoie che dovrebbero funzionare da qualsiasi finestra dell'applicazione). –

6

Provare a cambiare la shortcut context dell'azione, per esempio:

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

Senza vedere il codice completo, azzarderei un'ipotesi che da qualche parte venga abilitato/disabilitato. Assicurati che il collegamento venga colpito nel costruttore e non "disabilitato" da qualche altra parte a causa di un'impostazione, forse.

Problemi correlati