2

我有一组需要互斥的 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() 信号,但我宁愿这样做更干净。

4

1 回答 1

0

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

QObject* object = sender();

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

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

于 2015-04-28T22:47:49.310 回答