将 QGroupBox 添加到 QButtonGroup

Add a QGroupBox to a QButtonGroup

我有一组 3 个 QRadioButtons and 2 checkable QGroupBoxes that need to all be mutually exclusive. I like the convenience of adding my radio buttons to a 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() 信号,但我宁愿这样做比那更干净。

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

QObject* object = sender();

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

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