Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: thor.0x00 от Ноябрь 15, 2010, 02:13



Название: частичное изменение стиля виджета
Отправлено: 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;
}


Название: Re: частичное изменение стиля виджета
Отправлено: Kolobok от Ноябрь 15, 2010, 07:06
Посмотри в ассистенте Qt Style Sheets


Название: Re: частичное изменение стиля виджета
Отправлено: thor.0x00 от Ноябрь 15, 2010, 12:55
Класс, оказывается с помощью style-sheet можно столько всего изменять!
Но проблема у меня остается та же самая: изменив QSlider::groove, у меня пропадает стандартный handle слайдера!

Код
CSS
QSlider::groove:horizontal {
    border: 1px solid #999999;
    height: 8px;
}