我有一个QGroupBox,里面有几个QRadioButtons,在某些情况下我想要取消选中所有单选按钮。似乎在进行选择时无法做到这一点。你知道我可以做到这一点的方法,还是应该添加一个隐藏的单选按钮并检查它以获得所需的结果。
答案 0 :(得分:30)
您可以通过暂时关闭所有单选按钮的自动排他性,取消选中它们,然后重新打开它们来实现此效果:
QRadioButton* rbutton1 = new QRadioButton("Option 1", parent);
// ... other code ...
rbutton1->setAutoExclusive(false);
rbutton1->setChecked(false);
rbutton1->setAutoExclusive(true);
您可能希望使用QButtonGroup来保持整洁,它可以让您打开和关闭整个按钮组的排他性,而不是自己迭代它们:
// where rbuttons are QRadioButtons with appropriate parent widgets
// (QButtonGroup doesn't draw or layout anything, it's just a container class)
QButtonGroup* group = new QButtonGroup(parent);
group->addButton(rbutton1);
group->addButton(rbutton2);
group->addButton(rbutton3);
// ... other code ...
QAbstractButton* checked = group->checkedButton();
if (checked)
{
group->setExclusive(false);
checked->setChecked(false);
group->setExclusive(true);
}
但是,正如其他答案所述,您可能需要考虑使用复选框,因为单选按钮并不是真正意义上的。
答案 1 :(得分:0)
如果使用QGroupBox对按钮进行分组,则不能使用setExclusive(false)函数取消选中已选中的RadioButton。您可以在QT文档的QRadioButton部分中阅读有关此内容的信息。因此,如果您想重置按钮,可以尝试执行以下操作:
QButtonGroup *buttonGroup = new QButtonGroup;
QRadioButton *radioButton1 = new QRadioButton("button1");
QRadioButton *radioButton2 = new QRadioButton("button2");
QRadioButton *radioButton3 = new QRadioButton("button3");
buttonGroup->addButton(radioButton1);
buttonGroup->addButton(radioButton2);
buttonGroup->addButton(radioButton3);
if(buttonGroup->checkedButton() != 0)
{
// Disable the exclusive property of the Button Group
buttonGroup->setExclusive(false);
// Get the checked button and uncheck it
buttonGroup->checkedButton()->setChecked(false);
// Enable the exclusive property of the Button Group
buttonGroup->setExclusive(true);
}
您可以禁用ButtonGroup的Exclusive属性以重置与ButtonGroup相关联的所有按钮,然后可以启用Exclusive属性,这样将无法进行多个按钮检查。