draw basic Slider track geometry

This commit is contained in:
laserpants 2016-05-02 00:10:31 +03:00
parent 25b5015e33
commit 97cd0651d6
3 changed files with 59 additions and 1 deletions

View File

@ -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);

View File

@ -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;

View File

@ -2,6 +2,7 @@
#define SLIDER_P_H
#include "slider.h"
#include <QPainter>
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