Qt - iterating through QRadioButtons

Qt - iterating through QRadioButtons

本文关键字:QRadioButtons through iterating Qt      更新时间:2023-10-16

我正在做一个学校的小组项目。我组的一个成员创建了一个有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)