Вопрос такой: можно ли создать QGroupBox с функцией радио кнопки. С функцией обычной кнопки я делаю так:
qGB_ob1 = new QGroupBox(tr ("Yes"));
qGB_ob1->setCheckable (true);
qGB_ob1->setChecked (false);
... ... ...
http://www.forum.crossplatform.ru/index.php?showtopic=6035&st=0
В итоге создал такой класс:
class RadioGroupBox : public QGroupBox
{
Q_OBJECT
public:
RadioGroupBox (const QString &QS_ob, QWidget *parent = 0):
QGroupBox (QS_ob, parent)
{
setCheckable (true);
connect (this, SIGNAL (clicked ()), SLOT (slot_for_clicked ()));
}
void paintEvent (QPaintEvent *event)
{
QStylePainter paint (this);
QStyleOptionGroupBox option;
initStyleOption (&option);
paint.drawComplexControl (QStyle::CC_GroupBox, option);
option.rect = style()->subControlRect (QStyle::CC_GroupBox, &option,
QStyle::SC_GroupBoxCheckBox, this);
paint.save();
QPixmap px (option.rect.width(), option.rect.height());
px.fill (this, option.rect.left(), option.rect.top());
QBrush brush (px);
paint.fillRect (option.rect, brush);
paint.restore();
paint.drawPrimitive (QStyle::PE_IndicatorRadioButton, option);
}
private slots:
void slot_for_clicked ()
{
if (! isChecked()) setChecked (true);
}
};
Это из-за того, что под индикатором радиобаттона живет своей жизнью индикатор чекбокса. Он не затирается полностью. По крайней мере не под всеми стилями.
Попробуй заменить строку
px.fill (this, option.rect.left(), option.rect.top());
наpx.fill(option.palette.color(QPalette::Window));
Если не поможет, придётся отказываться от drawComplexControl и отрисовывать его самому. Как это делать смотри в исходниках. Проблема только в том, что отрисовка от стиля зависит.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)