crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> вопрос по QGroupBox
DAVID
  опции профиля:
сообщение 7.5.2014, 19:01
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 9.3.2014
Пользователь №: 4075

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

но кнопка нужна как у QRadioButton
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DAVID
  опции профиля:
сообщение 7.5.2014, 20:14
Сообщение #2


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 9.3.2014
Пользователь №: 4075

Спасибо сказали: 0 раз(а)




Репутация:   0  


Прикрепленное изображение

Вот как на этом изображении, только вместо обычной кнопки нужна радио кнопка
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 7.5.2014, 23:14
Сообщение #3


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


http://www.forum.crossplatform.ru/index.ph...c=6035&st=0
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DAVID
  опции профиля:
сообщение 8.5.2014, 10:57
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 9.3.2014
Пользователь №: 4075

Спасибо сказали: 0 раз(а)




Репутация:   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);
    }
};

Однако когда курсор мыши попадает в область переключателя происходит мерцание.
Как это можно исправить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 8.5.2014, 15:53
Сообщение #5


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Это из-за того, что под индикатором радиобаттона живет своей жизнью индикатор чекбокса. Он не затирается полностью. По крайней мере не под всеми стилями.
Попробуй заменить строку
px.fill (this, option.rect.left(), option.rect.top());
на
px.fill(option.palette.color(QPalette::Window));
Если не поможет, придётся отказываться от drawComplexControl и отрисовывать его самому. Как это делать смотри в исходниках. Проблема только в том, что отрисовка от стиля зависит.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 17.1.2021, 19:06