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)