2011-04-08 50 views
3

我有一个针对我正在学习的学校的组项目。我的小组成员创建了一个有〜75个单选按钮的窗口。我想强制所有人在按下按钮时“清除”或“取消选中”。Qt - 迭代QRadioButtons

有没有人知道这样做的好方法?我一直在调查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等。

+1

[Here](http://stackoverflow.com/q/31546511/1329652)是一个类似的,更一般的关于迭代布局中特定类型的对象。 – 2015-07-21 20:03:13

回答

3

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

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

+0

哦,哇,因为没有在文档中发现而感到愚蠢。 有没有简单的方法将QGroupBox转换为QButtonGroup?他使用UI编辑器做了所有事情,否则我们可以简单地更改类型。 – Nedlinin 2011-04-08 17:27:18

+0

QButtonGroup不是小部件,只是一个QObject管理按钮。所以按钮可以留在组框中。有专属按钮是不够的?如果将它们添加到任何窗口小部件(包括组框),这应该是默认设置。 – 2011-04-08 17:46:18

+0

啊。真棒,我正在寻找一个小部件添加到用户界面。 非常感谢帮助!解决了我的问题:) – Nedlinin 2011-04-08 19:38:34

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); 
    } 
} 

最有可能你需要操纵autoexclusive(如完成上面的代码块),以取消选中所有单选按钮(另请参阅@ Kristofer的回答:https://stackoverflow.com/a/9375491/1150303