例如,我有四个QRadioButton
rb1
,rb2
,rb3
,rb4
。我设置rb1
和rb3
已检查:
rb1->setChecked(true);
rb3->setChecked(true);
另外,我有四个QButtonGroup
:bg12
,bg34
,bg13
和bg24
,并且前两个非排他性(他们是默认值):
bg13->setExclusive(false);
bg24->setExclusive(false);
第一种情况:我将rb1
和rb2
添加到bg12
,将rb3
和rb4
添加到bg34
。然后我将所有按钮添加到网格布局,显示小部件,以及所有内容,一切都按预期工作(两个按钮处于活动状态,一行中的按钮排除了其中的另一个按钮)。
第二种情况:我将rb1
和rb2
添加到bg12
,将rb3
和rb4
添加到bg34
。然后,我将rb1
和rb3
添加到bg13
,将rb2
和rb4
添加到bg24
。现在它没有像我预期的那样工作,它们都表现得像“免费”按钮,我可以检查/取消选中它们中的任何一个。那么,我做错了什么?
更新:我也尝试了QPushButton
s(所以,没有排他性和类似的东西),看起来好像按钮已经在{{1}我添加它做另一个,它不再属于第一个:(
我想,你可能想知道为什么我会做这些奇怪的事情 - 我会解释。我想保留一对QButtonGroup
s的向量,并且每对中的一个按钮必须排除其对中的另一个按钮(它们代表两个独占状态),所以我想将每个对中的按钮分组为独占{ {1}}(例如示例中的QRadioButton
和QButtonGroup
),并且还将每对中的所有第一个按钮添加到另一个bg12
(非排他性,如{{ 1}}来自示例)并给它一个id。所以,我将能够处理状态更改,其中一个信号bg34
类提供了我们和id。也许有一种更简单的方法?
答案 0 :(得分:2)
QAbstractButton
只保留一个QButtonGroup
作为成员,因此一个按钮只能属于一个组。
但是对于非独占组,您可以使用QSignalMapper
代替。