Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: вопрос по QGroupBox
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
DAVID
Вопрос такой: можно ли создать QGroupBox с функцией радио кнопки. С функцией обычной кнопки я делаю так:
qGB_ob1 = new QGroupBox(tr ("Yes"));
qGB_ob1->setCheckable (true);
qGB_ob1->setChecked (false);
... ... ...

но кнопка нужна как у QRadioButton
DAVID
Нажмите для просмотра прикрепленного файла
Вот как на этом изображении, только вместо обычной кнопки нужна радио кнопка
DAVID
В итоге создал такой класс:
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);
    }
};

Однако когда курсор мыши попадает в область переключателя происходит мерцание.
Как это можно исправить?
igor_bogomolov
Это из-за того, что под индикатором радиобаттона живет своей жизнью индикатор чекбокса. Он не затирается полностью. По крайней мере не под всеми стилями.
Попробуй заменить строку
px.fill (this, option.rect.left(), option.rect.top());
на
px.fill(option.palette.color(QPalette::Window));
Если не поможет, придётся отказываться от drawComplexControl и отрисовывать его самому. Как это делать смотри в исходниках. Проблема только в том, что отрисовка от стиля зависит.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.