crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в вопрос по QGroupBox
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
igor_bogomolov Дата 8.5.2014, 15:53
  Это из-за того, что под индикатором радиобаттона живет своей жизнью индикатор чекбокса. Он не затирается полностью. По крайней мере не под всеми стилями.
Попробуй заменить строку
px.fill (this, option.rect.left(), option.rect.top());
на
px.fill(option.palette.color(QPalette::Window));
Если не поможет, придётся отказываться от drawComplexControl и отрисовывать его самому. Как это делать смотри в исходниках. Проблема только в том, что отрисовка от стиля зависит.
DAVID Дата 8.5.2014, 10:57
  В итоге создал такой класс:
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 Дата 7.5.2014, 23:14
  http://www.forum.crossplatform.ru/index.ph...c=6035&st=0
DAVID Дата 7.5.2014, 20:14
 
Прикрепленное изображение

Вот как на этом изображении, только вместо обычной кнопки нужна радио кнопка
DAVID Дата 7.5.2014, 19:01
  Вопрос такой: можно ли создать QGroupBox с функцией радио кнопки. С функцией обычной кнопки я делаю так:
qGB_ob1 = new QGroupBox(tr ("Yes"));
qGB_ob1->setCheckable (true);
qGB_ob1->setChecked (false);
... ... ...

но кнопка нужна как у QRadioButton
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 19:49