2011-04-08 32 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