2009-11-13 11 views
11

Tengo un QGroupBox con un par de QRadioButtons dentro de él y en algunos casos quiero que todos los botones de radio estén desmarcados. Parece que esto no es posible cuando se ha realizado una selección. ¿Conoces una manera de hacerlo? ¿O debería agregar un botón de radio oculto y verificar que esté activado para obtener el resultado deseado?¿Hay alguna manera de tener todos los botones de radion desactivados?

+3

Esto va en contra del principio de los botones de opción. Por definición, exactamente uno está seleccionado, siempre. ¿Por qué necesitas esto? – Thomas

+4

@Thomas: por lo general va en contra de la definición de botones de opción, pero a veces puede ser útil. Considere un asistente donde el usuario _debe_ hacer una elección mutuamente exclusiva. Puede presentarlos con botones de opción, pero no tienen ningún valor predeterminado. Ahora imagina que regresan a una página anterior y cambian algo, lo que significa que debes restablecer el resto de los datos, incluido configurar los botones de opción para que no vuelvan a seleccionar nada. (Lo ideal es que el asistente no pueda avanzar hasta que se seleccione uno de los botones de opción). –

+2

Es exactamente por eso que lo necesito. –

Respuesta

25

Puede conseguir este efecto desactivando temporalmente la exclusividad de auto para todos los botones de radio, desmarcando ellos, y luego convertirlos de nuevo en:

QRadioButton* rbutton1 = new QRadioButton("Option 1", parent); 
// ... other code ... 
rbutton1->setAutoExclusive(false); 
rbutton1->setChecked(false); 
rbutton1->setAutoExclusive(true); 

Es posible que desee buscar en el uso QButtonGroup para mantener las cosas más ordenadas , que va a dejar que encienda la exclusividad de manera intermitente durante todo un grupo de botones en lugar de iteración a través de su propia cuenta:

// where rbuttons are QRadioButtons with appropriate parent widgets 
// (QButtonGroup doesn't draw or layout anything, it's just a container class) 
QButtonGroup* group = new QButtonGroup(parent); 
group->addButton(rbutton1); 
group->addButton(rbutton2); 
group->addButton(rbutton3); 

// ... other code ... 

QAbstractButton* checked = group->checkedButton(); 
if (checked) 
{ 
    group->setExclusive(false); 
    checked->setChecked(false); 
    group->setExclusive(true); 
} 

Sin embargo, como las otras respuestas han mencionado, es posible que desee considerar el uso de casillas de verificación en su lugar, ya radio los botones no son realmente para este tipo de cosas.

+0

Este comportamiento aún es necesario si, en lugar de botones de opción, está agrupando un conjunto de botones. – Pierluigi

+0

@richardwb cuando hago el chequeo-> setChecked (falso), el botón que se seleccionó está desapareciendo de la pantalla. ¿Cómo te está funcionando? –

2

¿Funcionaría agregar un botón de opción con una etiqueta como "Ninguno"?

Cuestiones relacionadas