2015-04-28 4 views
2

У меня есть группа из 3 QRadioButtons и 2 checkable QGroupBoxes, которые должны быть взаимоисключающими. Мне нравится удобство добавления моих переключателей в QButtonGroup, чтобы автоматически обрабатывать это, но я не могу понять, как добавить QGroupBox в группу кнопок, потому что он не наследует от QAbstractButton, и я не могу найти доступ к его флажку.Добавить QGroupBox в QButtonGroup

Например,

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, но я скорее сделаю это более чисто, чем это.

ответ

0

Вы можете добавлять классы QAbstractButton только к экземпляру QButtonGroup. Поэтому в вашем случае, если вы хотите обрабатывать QGroupBox как один из эксклюзивных элементов, я думаю, вам нужно реализовать его самостоятельно. Может быть, вы могли бы соединить все сигналы от упомянутого виджета к тому же SLOT, и в этом слоте вы можете обновить проверенные/непроверенные виджеты с помощью функции отправителя:

QObject* object = sender(); 

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

Но если вам нужно сделать это в во многих местах вы должны реализовать для этого какой-то вспомогательный класс.

+0

Итак, нет способа подключиться к ребенку QCheckBox QGroupBox? Например, я могу подключиться к QLineEdit, встроенному в QComboBox, с помощью QComboBox :: lineEdit(). – Phlucious

+0

Но в этом случае QLineEdit является членом QComboBox, но QGroupBox может содержать любое число и любые производные от QWidget объекты ... поэтому для этого нет никакой конкретной функции. Но, возможно, вы можете использовать функцию [QObject :: findChildren] (http://doc.qt.io/qt-5/qobject.html#findChildren) для извлечения QCheckBox * дочерних элементов QGroupBox, а затем вы можете создавать соединения , –