diff --git a/components/slider.cpp b/components/slider.cpp index 34447f5..d512425 100644 --- a/components/slider.cpp +++ b/components/slider.cpp @@ -13,12 +13,30 @@ Slider::~Slider() { } +void Slider::setOrientation(Qt::Orientation orientation) +{ + Q_D(Slider); + d->orientation = orientation; + update(); +} + +Qt::Orientation Slider::orientation() const +{ + Q_D(const Slider); + return d->orientation; +} + void Slider::paintEvent(QPaintEvent *event) { Q_UNUSED(event) + Q_D(Slider); + QPainter painter(this); + d->paintTrack(&painter); + d->paintThumb(&painter); + #ifdef DEBUG_LAYOUT QPen pen; pen.setColor(Qt::red); diff --git a/components/slider.h b/components/slider.h index 07ad1b7..7f0bd06 100644 --- a/components/slider.h +++ b/components/slider.h @@ -14,6 +14,9 @@ public: explicit Slider(QWidget *parent = 0); ~Slider(); + void setOrientation(Qt::Orientation orientation); + Qt::Orientation orientation() const; + protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; diff --git a/components/slider_p.h b/components/slider_p.h index ff842d8..5a431db 100644 --- a/components/slider_p.h +++ b/components/slider_p.h @@ -2,6 +2,7 @@ #define SLIDER_P_H #include "slider.h" +#include class SliderPrivate { @@ -10,11 +11,47 @@ class SliderPrivate public: SliderPrivate(Slider *parent) - : q_ptr(parent) + : q_ptr(parent), + orientation(Qt::Horizontal) { } + QRect trackGeometry() const + { + Q_Q(const Slider); + + return Qt::Horizontal == orientation + ? QRect(0, q->rect().height()/2 - 1, q->rect().width(), 2) + : QRect(q->rect().width()/2 - 1, 0, 2, q->rect().height()); + } + + void paintTrack(QPainter *painter) + { + Q_Q(Slider); + + QBrush brush; + brush.setStyle(Qt::SolidPattern); + brush.setColor(QColor(0, 0, 0, 255)); + + painter->save(); + painter->fillRect(trackGeometry(), brush); + painter->restore(); + +#ifdef DEBUG_LAYOUT + painter->drawRect(q->rect().adjusted(1, 1, -2, -2)); +#endif + } + + void paintThumb(QPainter *painter) + { + painter->save(); + + painter->restore(); + } + Slider *const q_ptr; + + Qt::Orientation orientation; }; #endif // SLIDER_P_H