2015-11-19 2 views
5

У меня есть несколько переключателей в группе, есть ли способ получить индекс текущего элемента?Получить индекс проверенного переключателя в группе

enter image description here

Сейчас я использую этот код:

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

, который работает достаточно хорошо, но, возможно, есть стандартный Qt функция или способ сделать это?

ответ

10

Это прецедент для QButtonGroup.

Сгруппируйте свои переключатели с помощью QButtonGroup, если вы еще этого не сделали. Для каждой кнопки используйте QButtonGroup::addButton(button, id) для назначения последовательных идентификаторов вашим кнопкам, начиная с нуля.

Затем, чтобы получить индекс кнопки, используйте QButtonGroup::checkedId().

Когда вы используете конструктор Qt для оформления своей формы, вы можете группировать кнопки, выбирая их и выбрав «Назначить группе кнопок»> «Новая группа кнопок» в контекстном меню. Но я думаю, что вы не можете вручную назначать идентификаторы кнопкам в группе. Вместо этого используйте QButtonGroup::setId(button, id) после setupUI, чтобы изменить автоматически назначенные идентификаторы. (Они немного запутывают, считая отрицательный от -2, и я не знаю, как дизайнер точно выбирает порядок, поэтому я бы не стал рекомендовать, чтобы он зависел от этого заказа.)

+0

Действительно отличный ответ! Приоритеты не делают это справедливо, поэтому я думал, что я просто скажу спасибо за то, что написал его :) – waldyrious

+0

То же самое на отличный ответ. Существует так много, что скучно о Qt для новичков. Ваш ответ заставил меня больше работать. –

Смежные вопросы