Russian Qt Forum
Май 29, 2024, 12:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: частичное изменение стиля виджета  (Прочитано 2719 раз)
thor.0x00
Гость
« : Ноябрь 15, 2010, 02:13 »

Надо сменить полоску слайдера (SliderGroove) на pixmap, а все остальное оставить прежним. Делаю это с помощью стилей. Это удобнее, чем наследоваться от QSlider и рисовать в его paint-е, т.к. у меня еще есть стилизованные виджеты.
Так вот, в drawComplexControl() приходится перерисовывать весь виджет. Где взять картинку для отрисовки стандартного движка слайдера? Еще наверное придется как-то восстанавливать смену движка при наведении и нажатии мыши.
P.S. я в такие дебри со стилями виджетов недавно залез, поправьте плиз если делаю что-то криво

Код:
void VCStyle::drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,
                            QPainter *painter, const QWidget *widget) const
{
    switch (control) {
    case CC_Slider:
        if (const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider *>(option)) {
            QRect groove = subControlRect(CC_Slider, option, SC_SliderGroove, widget);
            QRect handle = subControlRect(CC_Slider, option, SC_SliderHandle, widget);

            painter->save();

            if ((option->subControls & SC_SliderGroove) && groove.isValid()) {
                QPixmap grv = QPixmap("slider_bar.png");
                painter->drawPixmap(QRect(groove.x() + 5, groove.y(),
                                          groove.width() - 10, grv.height()), grv);
            }

    if ((option->subControls & SC_SliderHandle) && handle.isValid()) {
                //где взять стандартную картинку движка слайдера??
//QPixmap hndl;
                painter->drawPixmap(handle.topLeft(), hndl);
            }
            painter->restore();
        }
        break;
    default:
        QWindowsStyle::drawComplexControl(control, option, painter, widget);
        break;
    }
    return;
}
Записан
Kolobok
Гость
« Ответ #1 : Ноябрь 15, 2010, 07:06 »

Посмотри в ассистенте Qt Style Sheets
Записан
thor.0x00
Гость
« Ответ #2 : Ноябрь 15, 2010, 12:55 »

Класс, оказывается с помощью style-sheet можно столько всего изменять!
Но проблема у меня остается та же самая: изменив QSlider::groove, у меня пропадает стандартный handle слайдера!

Код
CSS
QSlider::groove:horizontal {
    border: 1px solid #999999;
    height: 8px;
}
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 17.