Qt - iterating through QRadioButtons
Qt - iterating through QRadioButtons
我正在做一个学校的小组项目。我组的一个成员创建了一个有75个单选按钮的窗口。我想在按下按钮时强制它们全部为"clear"或"unchecked"。
有谁知道做这件事的好方法吗?我一直在寻找QObjectList,但我不能简单地做QObjectList *children = new QObjectList(ui->groupBox->children());并使用for循环来循环它们,因为QObjectList似乎没有next方法.
我也试着做一些像
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,等等。
使用QButtonGroup,将其设置为exclusive(然后一次只检查一个单选按钮)。它还提供了当前选中的按钮,以防您也想取消选中它。(没有选中按钮)。
还要注意,您可能想要修改的是"checked"属性,而不是"checkable"(其中false表示根本不能选中/不选中按钮)。
如果您不喜欢使用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);
}
}
很可能您需要操作自动排他(如上面的代码块所做的那样)以使所有单选按钮未选中(另请参阅@Kristofer的答案:https://stackoverflow.com/a/9375491/1150303)