将一个QRadioButton分组为几个QButtonGroups

时间:2011-08-20 02:19:48

标签: c++ qt

例如,我有四个QRadioButton rb1rb2rb3rb4。我设置rb1rb3已检查:

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

另外,我有四个QButtonGroupbg12bg34bg13bg24,并且前两个非排他性(他们是默认值):

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

第一种情况:我将rb1rb2添加到bg12,将rb3rb4添加到bg34。然后我将所有按钮添加到网格布局,显示小部件,以及所有内容,一切都按预期工作(两个按钮处于活动状态,一行中的按钮排除了其中的另一个按钮)。

第二种情况:我将rb1rb2添加到bg12,将rb3rb4添加到bg34。然后,我将rb1rb3添加到bg13,将rb2rb4添加到bg24。现在它没有像我预期的那样工作,它们都表现得像“免费”按钮,我可以检查/取消选中它们中的任何一个。那么,我做错了什么?

更新:我也尝试了QPushButton s(所以,没有排他性和类似的东西),看起来好像按钮已经在{{1}我添加它做另一个,它不再属于第一个:(

我想,你可能想知道为什么我会做这些奇怪的事情 - 我会解释。我想保留一对QButtonGroup s的向量,并且每对中的一个按钮必须排除其对中的另一个按钮(它们代表两个独占状态),所以我想将每个对中的按钮分组为独占{ {1}}(例如示例中的QRadioButtonQButtonGroup),并且还将每对中的所有第一个按钮添加到另一个bg12(非排他性,如{{ 1}}来自示例)并给它一个id。所以,我将能够处理状态更改,其中一个信号bg34类提供了我们和id。也许有一种更简单的方法?

1 个答案:

答案 0 :(得分:2)

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

但是对于非独占组,您可以使用QSignalMapper代替。