3

我有一个正在为学校工作的小组项目。我小组的一个成员创建了一个包含约 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 等。

4

2 回答 2

3

使用QButtonGroup,将其设置为独占(然后一次只检查一个单选按钮)。它还为您提供当前选中的按钮,以防您也想取消选中它。(根本没有选中的按钮)。

另请注意,您可能要修改的是“checked”属性,而不是“checkable”(其中 false 表示根本无法选中/取消选中按钮)。

于 2011-04-08T17:22:56.543 回答
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 )

于 2015-07-11T10:07:57.390 回答