将QGroupBox添加到QButtonGroup

时间:2015-04-28 20:51:36

标签: c++ qt qt4 qgroupbox qbuttongroup

我有一组3 QRadioButtons和2个可检查的QGroupBoxes,它们都需要互相排斥。我喜欢将单选按钮添加到QButtonGroup以便自动处理这个的方便,但我似乎无法弄清楚如何将QGroupBox添加到按钮组,因为它不会从QAbstractButton继承而且我可以找不到它的复选框。

例如,

QRadioButton* rb1 = new QRadioButton("Button1");
QRadioButton* rb2 = new QRadioButton("Button2");
QRadioButton* rb3 = new QRadioButton("Button3");
QGroupBox* gb1 = new QGroupBox;
gb1->setCheckable(true);
QGroupBox* gb2 = new QGroupBox;
gb2->setCheckable(true);
QRadioButton* rb1 = new QRadioButton("Button1");

QButtonGroup* grp = new QButtonGroup;
grp->addButton(rb1);
grp->addButton(rb2);
grp->addButton(rb3);
grp->addButton(gb1);   //these two fail
grp->addButton(gb2);

有一种简单的方法可以实现这一目标吗?我知道我可以连接到QGroupBox的clicked()信号,但我宁愿比这更干净。

1 个答案:

答案 0 :(得分:0)

您只能将QAbstractButton派生类添加到QButtonGroup实例。因此,在您的情况下,如果您想将QGroupBox作为独家项目之一处理,我认为您需要自己实现它。也许您可以将所提到的小部件中的所有SIGNAL连接到同一个SLOT,并且在该SLOT中,您可以借助发送方功能更新已检查/未检查的小部件:

QObject* object = sender();

if ( object == groupBox1 )
{
    // ...
}
else if ( object == groupBox1 )
{
    // ...

但是如果你需要在很多地方这样做,那么你应该为此目的实现某种辅助类。