Qt - перебирать QRadioButtons

У меня есть групповой проект для школы, над которым я работаю. Член моей группы создал окно, содержащее ~75 переключателей. Я хочу заставить всех их быть "чистыми" или "неконтролируемыми" при нажатии кнопки.

Кто-нибудь знает хороший способ сделать это? Я искал QObjectList, но я не могу просто сделать QObjectList *children = new QObjectList(ui->groupBox->children()); и зациклить их, используя цикл for, так как QObjectList не имеет следующего метода.

Я также пытался сделать что-то вроде

QObjectList *children = new QObjectList(ui->groupBox->children());
for(QObject *iterator = children.first(); iterator!=NULL; children.pop_front()){
    iterator = children.first();
    iterator->at(0)->setCheckabled(false);
}

Но поскольку итератор является объектом QObject, setCheckable не существует, как на переключателе.

Мысли / советы будут оценены.

Редактировать: я даже намекаю на способ перебора переменных с похожими именами. Например, все мои радиокнопки называются RadioButton_1, RadioButton_2 и т. Д.

2 ответа

Решение

Используйте QButtonGroup, установите для него исключение (тогда будет проверяться только одна радиокнопка). Она также дает вам отмеченную в данный момент кнопку, на случай, если вы захотите снять с нее флажок. (чтобы вообще не было проверенных кнопок).

Также обратите внимание, что вы, вероятно, захотите изменить это свойство "флажок", а не "проверяемый" (где "ложь" означает, что кнопка вообще не может быть отмечена / не отмечена).

Если вам не нравится использовать QButtonGroup (слишком много усилий по настройке или по каким-либо другим причинам), затем используйте некоторую итерацию, подобную этой:

QListIterator<QObject *> i(ui->groupBox->children());
while (i.hasNext())
{
    QRadioButton* b = qobject_cast<QRadioButton*>( i.next() );
    if (b > 0 && b->isChecked()) {
        b->setAutoExclusive(false);
        b->setChecked(false);
        b->setAutoExclusive(true);
    }
}

Скорее всего, вам нужно манипулировать автоэксклюзией (как это сделано в приведенном выше блоке кода), чтобы все переключатели были не отмечены (см. Также ответ @ Кристофер: /questions/31739396/qradiobutton-proveryaet-snimaet-problemu-v-qt/31739402#31739402)

Другие вопросы по тегам