2011-08-20 35 views
2

我有,例如,四QRadioButton小号rb1rb2rb3rb4。我设置rb1rb3检查:分组一个QRadioButton成几个QButtonGroups

rb1->setChecked(true); 
rb3->setChecked(true); 

而且,我有四个QButtonGroup S:bg12bg34bg13bg24,使前两个非排他性(它们是默认情况下):

bg13->setExclusive(false); 
bg24->setExclusive(false); 

第一种情况:我补充rb1rb2bg12,并rb3rb4bg34。然后,我将所有按钮添加到网格布局,显示小部件以及所有这些东西,一切按预期工作(两个按钮处于活动状态,并且一行中的按钮排除其行中的另一个按钮)。

第二种情况:我补充rb1rb2bg12,并rb3rb4bg34。然后我将rb1rb3添加到bg13,rb2rb4bg24。现在它不像我预期的那样工作,它们都像«免费»按钮一样,并且我可以选中/取消选中它们中的任何一个。那么,我做错了什么?

UPD:我也有QPushButton S(所以,没有排他性和这样的东西)试了一下,它只是看起来像,如果按钮已经处于QButtonGroup,我添加它做一个又一个,这不是不属于第一个:(

我想,你可能会想知道为什么我会做这个奇怪的东西 - 我会解释我想保留一对QRadioButton s的矢量,并在每一对中的按钮必须排除在其对中的另一个(它们代表两个异状态),所以想在每对组按钮的独家QButtonGroup(在示例中一样bg12bg34),并且还添加,例如,所有每对另一QButtonGroup(非排他的,像bg13从示例)的第一按钮,并给它的ID。所以,我将能够通过QButtonGroup类为我们提供的信号和id之一处理状态变化。也许有一个更简单的方法?

回答

2

QAbstractButton拥有一个QButtonGroup作为成员,因此按钮只能属于一个组。

但对于非排他性的组,你可以使用QSignalMapper!而非。

+0

哇,QSignalMapper正是我需要的。非常感谢! – karlicoss