Assistant:
QRect QStyleOption::rect
This variable holds the area that should be used for various calculations and painting.
Подозреваю что результатом работы такого кода будет рисование эллипса заполненого синим цветом?
Вобщем, вот как делали свой слайдер люди:
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 = cached(":res/images/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 = cached(":res/images/slider_thumb_on.png");
painter->drawPixmap(handle.topLeft(), hndl);
}
painter->restore();
}
break;
}
Это кусок кода из определения стиля для демок в QT4.2.2. Код находится по адресу $(qtdir)/demos/shared/arthurstyle.cpp
Как видишь, вначале они пытаются получить QStyleOptionSlider из более общего QStyleOptionComplex. Затем из того же QStyleOptionComplex получают прямоугольник в котором находится желобок(groove) и ползунок(handle). Далее они рисуют соответствующие пиксмапы в этих прямоугольниках. Ничего военного!
Я бы советовал тебе просто передрать тот код и вставить в свой, убрав при этом вызов drawHoverRect() (здесь я заменил эту часть кода точками, поскольку для начала сойдет и рисование без "спецэффектов"), а также рисуя вместо пиксмапов просто прямоугольники. Например так:
if ((option->subControls & SC_SliderGroove) && groove.isValid()) {
painter->fillRect(QRect(groove.x() + 5, groove.y(),
groove.width() - 10, grv.height()),
Qt::red);
}
А вот когда такой простой и не очень красивый слайдер таки нарисуется, тогда начать эксперименты:
- путем исключения "лишних" кусков кода, понять как работает и что делает каждая его строчка;
- нарисовать пискмапы вместо заполненных цветом прямоугольников;
- определить что должно изменяться(рисовться) когда указатель мыши находится над слайдером.