Надо сменить полоску слайдера (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;
}