2012-02-29 20 views
12

Estoy construyendo un pequeño programa en Qt con barras de menús (menuBar) usando C++ y me gustaría saber cómo atenuar (por ejemplo, deshabilitar) un elemento del menú cuando una cierta variable está activada. ¿Es posible?Cómo atenuar un elemento de menú en Qt

Respuesta

14

Si conoces a un índice de la QAction correspondiente:

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

P. S. Como amablemente se solicita a continuación, setEnabled(bool) y setDisabled(bool) son ranuras (por lo que es toggle()), por lo que se pueden conectar a una señal que indica la necesidad de cambiar la disponibilidad de la acción.

+2

Se podría añadir a su respuesta que 'setEnabled (bool) 'y' setDisabled (bool) 'son slots (también lo son' toggle() '), por lo que se pueden conectar a una señal que indique la necesidad de cambiar la disponibilidad de la acción. –

+0

Thanx @LucTouraille! –

+2

Si la variable cambia con frecuencia (más a menudo que se muestra el menú), puede ser conveniente alternar solo en respuesta a 'signal: QMenu :: aboutToShow()'; no tiene sentido cambiar algo invisible de todos modos. – MSalters

5

Buscar el índice de la acción no es necesariamente conveniente. Si ha creado la interfaz con el editor de formularios de QtCreator, tendrá una acción para cada elemento del menú. Sus nombres se basan en el texto que primero le das a las acciones. Por ejemplo, si ingresa de forma interactiva un elemento de menú con el título Foo Bar, se crea una acción llamada actionFoo_Bar para usted. Simplemente escriba ui> acción en el editor de código y observe qué "nombre completo" propondrá QtCreator.

En tal caso yo consideraría una llamada como esta:

ui->actionFoo_Bar.setEnabled(false); 

Usted puede incluso hacer que el elemento de menú desaparece con

ui->actionFoo_Bar.setVisible(false); 
Cuestiones relacionadas