У меня группа из 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);
Есть ли простой способ сделать это? Я знаю, что могу подключиться к сигналу clicked () QGroupBox, но лучше сделать это более аккуратно, чем это.
Вы можете только добавить производные классы QAbstractButton к экземпляру QButtonGroup. Так что в вашем случае, если вы хотите обработать QGroupBox как один из эксклюзивных элементов, я думаю, вам нужно реализовать его самостоятельно. Возможно, вы могли бы подключить все СИГНАЛЫ из упомянутого виджета к одному и тому же слоту, и в этом слоте вы можете обновить проверенные / непроверенные виджеты с помощью функции отправителя:
QObject* object = sender();
if ( object == groupBox1 )
{
// ...
}
else if ( object == groupBox1 )
{
// ...
Но если вам нужно сделать это во многих местах, вы должны реализовать некоторый вспомогательный класс для этой цели.