2012-02-29 14 views
12

Sto costruendo un piccolo programma in Qt con le barre dei menu (menuBar) usando C++ e vorrei sapere come oscurare (ad esempio disabilitare) un elemento del menu quando una certa variabile è attivata. È possibile?Come deselezionare una voce di menu in Qt

risposta

14

Se si conosce un indice del corrispondente QAction:

QMenu::actions.at(i).setEnabled(false); 

P.S. Come gentilmente richiesto di seguito, setEnabled(bool) e setDisabled(bool) sono slot (così è toggle()), in modo che possano essere collegati a un segnale che indica la necessità di modificare la disponibilità dell'azione.

+2

si potrebbe aggiungere alla tua risposta che 'setEnabled (bool) 'e' setDisabled (bool) 'sono slot (quindi è' toggle() '), quindi possono essere collegati a un segnale che indica la necessità di modificare la disponibilità dell'azione. –

+0

Grazie Than @LucTouraille! –

+2

Se la variabile cambia frequentemente (più spesso di quanto viene visualizzato nel menu), potrebbe essere opportuno attivarla solo in risposta a 'signal: QMenu :: aboutToShow()'; non ha senso cambiare qualcosa che è comunque invisibile. – MSalters

5

Cercare l'indice dell'azione non è necessariamente conveniente. Se hai costruito l'interfaccia con l'editor di moduli di QtCreator, avrai un'azione per ogni voce di menu. I loro nomi sono basati sul testo che prima hai dato alle azioni. Ad esempio se si entra in modo interattivo in una voce di menu con il titolo Foo Bar, viene creata per te un'azione chiamata actionFoo_Bar. Basta digitare ui-> action nell'editor di codice e guardare cosa "name completion" proporrà QtCreator.

In tal caso vorrei prendere in considerazione una chiamata in questo modo:

ui->actionFoo_Bar.setEnabled(false); 

Si possono anche fare la voce di menu scompare con

ui->actionFoo_Bar.setVisible(false); 
Problemi correlati