2015-11-19 20 views
5

Ho diversi pulsanti di opzione in un gruppo, c'è un modo per ottenere l'indice della voce attualmente selezionata?Ottieni l'indice del pulsante di opzione selezionato nel gruppo

enter image description here

questo momento io uso questo codice:

int getCheckedRadioButton(QWidget *w) 
{ 
    int ii = 0; 
    foreach (QRadioButton *button, w->findChildren<QRadioButton*>()) { 
     if (button->isChecked()) { 
      return ii; 
     } 
     ii++; 
    } 
    return -1; 
} 

che funziona abbastanza bene, ma forse v'è una funzione standard o Qt modo per farlo?

risposta

10

Questo è un caso d'uso per QButtonGroup.

Raggruppa i tuoi pulsanti di opzione con QButtonGroup se non lo hai già fatto. Per ogni pulsante, utilizzare QButtonGroup::addButton(button, id) per assegnare ID consecutivi ai pulsanti, iniziando da zero.

Quindi, per ricevere l'indice del pulsante, utilizzare QButtonGroup::checkedId().

Quando si utilizza il progettista Qt per progettare il modulo, è possibile raggruppare i pulsanti selezionandoli e scegliendo "Assegna a gruppo di pulsanti"> "Nuovo gruppo di pulsanti" dal menu di scelta rapida. Ma penso che non sia possibile assegnare manualmente gli ID ai pulsanti del gruppo. Utilizzare invece QButtonGroup::setId(button, id) dopo setupUI per modificare gli ID assegnati automaticamente. (Sono un po 'confusi, contando il negativo da -2 e non so come il progettista scelga esattamente l'ordine, quindi non consiglierei di dipendere da quell'ordine.)

+0

Davvero un'ottima risposta! Gli upvotes non rendono giustizia, quindi ho pensato di dire esplicitamente grazie per averlo scritto :) – waldyrious

+0

Idem sulla risposta eccellente. C'è così tanto che è ottuso su Qt per il novizio. La tua risposta mi ha impedito di fare più lavoro. –