xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/screen/sliderwidget.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "sliderwidget.h"
2 #include <QPainter>
3 #include <QMouseEvent>
4 #include <qmath.h>
5 #include <QDebug>
6 #include <QDebug>
7 
8 class SliderWidgetPrivate
9 {
10 public:
11     int min =0;
12     int max=10;
13     int value=0;
14     qreal mousePress;
15     qreal margin=2.0;
16     qreal sliderWidth ;
17     qreal sliderHeight;
18     qreal sliderH;
19 
20     qreal blockHeight;
21     qreal blockWidth;
22     qreal minHeight;
23     qreal maxHeight;
24 
25     void handBlockShowRange();
26     void handValueRang();
27     void handleMousepress();
28     void handleValue();
29 };
30 
31 
SliderWidget(QWidget * parent)32 SliderWidget::SliderWidget(QWidget *parent) : QWidget(parent),
33     m_d(new SliderWidgetPrivate)
34 {
35     setMaximumWidth(30);
36     setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
37 }
38 
~SliderWidget()39 SliderWidget::~SliderWidget()
40 {
41     delete m_d;
42 }
43 
setRange(int min,int max)44 void SliderWidget::setRange(int min, int max)
45 {
46     m_d->max = max;
47     m_d->min = min;
48 }
49 
value()50 int SliderWidget::value()
51 {
52     return m_d->value;
53 }
54 
setValue(int value)55 void SliderWidget::setValue(int value)
56 {
57     m_d->value =value;
58     m_d->handleValue();
59     this->update();
60 }
61 
mousePressEvent(QMouseEvent * e)62 void SliderWidget::mousePressEvent(QMouseEvent *e)
63 {
64     mouseMoveEvent(e);
65 }
66 
mouseMoveEvent(QMouseEvent * e)67 void SliderWidget::mouseMoveEvent(QMouseEvent *e)
68 {
69     m_d->mousePress = e->pos().y();
70     m_d->handleMousepress();
71     emit valueChanged(m_d->value);
72     this->update();
73 }
74 
paintEvent(QPaintEvent * e)75 void SliderWidget::paintEvent(QPaintEvent *e)
76 {
77     Q_UNUSED(e)
78     QPainter painter(this);
79     QRectF sliderRect(m_d->margin, m_d->margin, m_d->sliderWidth, m_d->sliderHeight);
80     painter.drawRect(sliderRect);
81     QRectF fillRect(m_d->margin, m_d->mousePress,   m_d->sliderWidth, height()-m_d->mousePress);
82     painter.setBrush(Qt::blue);
83     painter.drawRect(fillRect);
84 
85     QRectF blockRect(1, m_d->mousePress,  m_d->blockWidth, m_d->blockHeight);
86     painter.setBrush(Qt::gray);
87     painter.drawRect(blockRect);
88 
89 }
90 
resizeEvent(QResizeEvent * e)91 void SliderWidget::resizeEvent(QResizeEvent *e)
92 {
93     QWidget::resizeEvent(e);
94     m_d->sliderWidth = width() - m_d->margin*2;
95     m_d->blockHeight = width()/2;
96     m_d->sliderHeight = height()-m_d->blockHeight;
97     m_d->blockWidth = width()-2;
98     m_d->sliderH = height() -m_d->margin-m_d->blockHeight;
99 
100     //    qDebug()<<"sliderHeight"<<m_d->sliderHeight;
101     //    qDebug()<<"value "<<m_d->value;
102     //    qDebug()<<"blockHeight "<<m_d->blockHeight;
103     //    qDebug()<<"value "<<m_d->value;
104     //    qDebug()<<"sliderH "<<m_d->sliderH;
105     //    qDebug()<<"max-min "<<m_d->max -m_d->min;
106     m_d->handleValue();
107     //    qDebug()<<"mouse : "<< m_d->mousePress;
108 }
109 
sizeHint() const110 QSize SliderWidget::sizeHint() const
111 {
112     return QSize(25, 100);
113 }
114 
handValueRang()115 void SliderWidgetPrivate::handValueRang()
116 {
117     if(value <= min)
118     {
119         value =min;
120     }else if(value >= max)
121     {
122         value = max;
123     }
124 }
125 
handBlockShowRange()126 void SliderWidgetPrivate::handBlockShowRange()
127 {
128     //处理滑块最小位置.
129     if(mousePress> sliderHeight)
130     {
131         mousePress = sliderHeight;
132     }
133 
134     //处理滑块最大位置.
135     if(mousePress <(margin))
136     {
137         mousePress =margin;
138     }
139 }
140 
141 
handleMousepress()142 void SliderWidgetPrivate::handleMousepress()
143 {
144     handBlockShowRange();
145     qreal dev = (max-min)/sliderH;
146     value = (sliderHeight-mousePress)*dev + min;
147     handValueRang();
148 }
149 
handleValue()150 void  SliderWidgetPrivate::handleValue()
151 {
152     qreal dev = (max-min)/sliderH ;
153     mousePress = sliderHeight - (value-min)/dev;
154     handBlockShowRange();
155 }
156