А зачем думать? Берем да смотрим исходники
QPainter p(this);
QStyleOptionSlider opt = d->getStyleOption();
opt.subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderHandle;
if (d->tickPosition != NoTicks)
opt.subControls |= QStyle::SC_SliderTickmarks;
if (d->pressedControl) {
opt.activeSubControls = d->pressedControl;
opt.state |= QStyle::State_Sunken;
} else {
opt.activeSubControls = d->hoverControl;
}
style()->drawComplexControl(QStyle::CC_Slider, &opt, &p, this);
Унаследовал клас, потом переопределяешь paintevent(). и Там рисуешь вот по примеру свою версию слидера.
добавлено спустя 1 минуту: А вот функция которая возвращает опции стиля твоего слидера, ее изменять по ходу не нужно.
QStyleOptionSlider QSliderPrivate::getStyleOption() const
{
Q_Q(const QSlider);
QStyleOptionSlider opt;
opt.init(q);
opt.subControls = QStyle::SC_None;
opt.activeSubControls = QStyle::SC_None;
opt.orientation = orientation;
opt.maximum = maximum;
opt.minimum = minimum;
opt.tickPosition = (QSlider::TickPosition)tickPosition;
opt.tickInterval = tickInterval;
opt.upsideDown = (orientation == Qt::Horizontal) ?
(invertedAppearance != (opt.direction == Qt::RightToLeft))
: (!invertedAppearance);
opt.direction = Qt::LeftToRight; // we use the upsideDown option instead
opt.sliderPosition = position;
opt.sliderValue = value;
opt.singleStep = singleStep;
opt.pageStep = pageStep;
if (orientation == Qt::Horizontal)
opt.state |= QStyle::State_Horizontal;
return opt;
}
добавлено спустя 3 минуты: Но тут есть проблема, в куте много методов и членов обьявленны как приват, поэтому ты не сможешь получить у унаследованого класса доступ к ним, но может можно будет обойтись методами обьявлеными как паблик, тогда замени в ф-е QSliderPrivate::getStyleOption на новые методы, ибо оно не найдет приватовские... Если не выйдет, то тогда бери создавай свой слидер вообще, откываешь исходники копируешь и начинаешь добавлять/изменять что тебе нужно. Займет макс день, но зато сделаешь свой контрол