我正在为学校开展一个小组项目。我小组的一名成员创建了一个有~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等。
答案 0 :(得分:3)
使用QButtonGroup,将其设置为独占(然后一次只检查一个单选按钮)。它还为您提供当前选中的按钮,以防您想要取消选中它。 (根本没有检查按钮)。
另请注意,您可能要修改的是“已检查”属性,而不是“可检查”(其中false表示根本无法选中/取消选中该按钮)。
答案 1 :(得分:1)
如果您不想使用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)