1*4882a593Smuzhiyun #include "rollswitchwidget.h"
2*4882a593Smuzhiyun #include <QMouseEvent>
3*4882a593Smuzhiyun #include <QPainter>
4*4882a593Smuzhiyun #include<QPen>
5*4882a593Smuzhiyun #include <QDebug>
6*4882a593Smuzhiyun #include <qmath.h>
7*4882a593Smuzhiyun
RollSwitchWidget(QWidget * parent)8*4882a593Smuzhiyun RollSwitchWidget::RollSwitchWidget(QWidget *parent)
9*4882a593Smuzhiyun : QWidget(parent),
10*4882a593Smuzhiyun m_text("SERIAL %1"),
11*4882a593Smuzhiyun m_index(0),
12*4882a593Smuzhiyun m_count(3)
13*4882a593Smuzhiyun {
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun }
16*4882a593Smuzhiyun
setCount(int count)17*4882a593Smuzhiyun void RollSwitchWidget::setCount(int count)
18*4882a593Smuzhiyun {
19*4882a593Smuzhiyun m_count = count;
20*4882a593Smuzhiyun }
21*4882a593Smuzhiyun
currentIndex()22*4882a593Smuzhiyun int RollSwitchWidget::currentIndex()
23*4882a593Smuzhiyun {
24*4882a593Smuzhiyun return m_index;
25*4882a593Smuzhiyun }
26*4882a593Smuzhiyun
getPoint(int r,int angle)27*4882a593Smuzhiyun QPoint getPoint(int r, int angle)
28*4882a593Smuzhiyun {
29*4882a593Smuzhiyun int x1 = r * qCos(angle * M_PI / 180);
30*4882a593Smuzhiyun int y1 = r * qSin(angle * M_PI /180);
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun return QPoint(x1, y1);
33*4882a593Smuzhiyun }
34*4882a593Smuzhiyun
paintEvent(QPaintEvent * e)35*4882a593Smuzhiyun void RollSwitchWidget::paintEvent(QPaintEvent *e)
36*4882a593Smuzhiyun {
37*4882a593Smuzhiyun QWidget::paintEvent(e);
38*4882a593Smuzhiyun QPainter painter(this);
39*4882a593Smuzhiyun painter.setRenderHints(QPainter::Antialiasing);
40*4882a593Smuzhiyun QMargins margins = contentsMargins();
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun QFont f = this->font();
43*4882a593Smuzhiyun f.setPointSizeF(f.pointSizeF()+1);
44*4882a593Smuzhiyun f.setBold(true);
45*4882a593Smuzhiyun painter.setFont(f);
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun QRect rect = this->rect().adjusted(margins.left(), margins.top(), - margins.bottom(), -margins.right());
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun int textX = rect.width()/3;
50*4882a593Smuzhiyun int textY = rect.y();
51*4882a593Smuzhiyun QString text = QString(m_text).arg(m_index+1);
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun QRectF textRect(textX, textY, textX, rect.height());
54*4882a593Smuzhiyun QTextOption option(Qt::AlignCenter);
55*4882a593Smuzhiyun QRectF fixRect = painter.boundingRect(textRect, text, option);
56*4882a593Smuzhiyun painter.save();
57*4882a593Smuzhiyun //painter.setPen(QColor(141, 141, 141));
58*4882a593Smuzhiyun painter.setPen(QColor(56, 56, 56));
59*4882a593Smuzhiyun painter.drawText(fixRect, text);
60*4882a593Smuzhiyun painter.restore();
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun m_leftRect= QRect(rect.x(), rect.y(), textX, rect.height());
63*4882a593Smuzhiyun m_rightRect = QRect(rect.x() +textX*2, rect.y(), textX, rect.height());
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun int r = m_leftRect.height()/2;
66*4882a593Smuzhiyun QPointF center(m_leftRect.x()+ m_leftRect.width()/2,
67*4882a593Smuzhiyun m_leftRect.y() +m_leftRect.height()/2);
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun QPen pen(Qt::gray);
71*4882a593Smuzhiyun pen.setWidthF(2.5);
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun painter.save();
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun QPalette palette = this->palette();
76*4882a593Smuzhiyun palette.setCurrentColorGroup(QPalette::Disabled);
77*4882a593Smuzhiyun // if(currentIndex() == 0)
78*4882a593Smuzhiyun // {
79*4882a593Smuzhiyun // pen.setColor(palette.color(QPalette::Text));
80*4882a593Smuzhiyun // }
81*4882a593Smuzhiyun painter.setPen(pen);
82*4882a593Smuzhiyun painter.translate(center);
83*4882a593Smuzhiyun painter.drawLine(QPointF(0,0), getPoint(m_leftRect, 30));
84*4882a593Smuzhiyun painter.drawLine(QPointF(0,0), getPoint(m_leftRect, -30));
85*4882a593Smuzhiyun painter.restore();
86*4882a593Smuzhiyun
87*4882a593Smuzhiyun center = QPointF(m_rightRect.x() + m_rightRect.width()/2,
88*4882a593Smuzhiyun m_rightRect.y() + m_rightRect.height()/2);
89*4882a593Smuzhiyun painter.save();
90*4882a593Smuzhiyun pen.setColor(Qt::gray);
91*4882a593Smuzhiyun // if(currentIndex() == m_count-1)
92*4882a593Smuzhiyun // {
93*4882a593Smuzhiyun // pen.setColor(palette.color(QPalette::Text));
94*4882a593Smuzhiyun // }
95*4882a593Smuzhiyun painter.setPen(pen);
96*4882a593Smuzhiyun painter.translate(center);
97*4882a593Smuzhiyun painter.drawLine(QPointF(0,0), getPoint(m_rightRect, 150));
98*4882a593Smuzhiyun painter.drawLine(QPointF(0,0), getPoint(m_rightRect, -150));
99*4882a593Smuzhiyun painter.restore();
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun }
102*4882a593Smuzhiyun
mousePressEvent(QMouseEvent * e)103*4882a593Smuzhiyun void RollSwitchWidget::mousePressEvent(QMouseEvent *e)
104*4882a593Smuzhiyun {
105*4882a593Smuzhiyun if(m_leftRect.contains(e->pos()))
106*4882a593Smuzhiyun {
107*4882a593Smuzhiyun m_index --;
108*4882a593Smuzhiyun }else if(m_rightRect.contains(e->pos()))
109*4882a593Smuzhiyun {
110*4882a593Smuzhiyun m_index ++;
111*4882a593Smuzhiyun }
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun if(m_index <0)
114*4882a593Smuzhiyun {
115*4882a593Smuzhiyun m_index =2;
116*4882a593Smuzhiyun }if(m_index >= m_count)
117*4882a593Smuzhiyun {
118*4882a593Smuzhiyun m_index =0;
119*4882a593Smuzhiyun }
120*4882a593Smuzhiyun this->update();
121*4882a593Smuzhiyun emit indexChange(m_index);
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun }
124*4882a593Smuzhiyun
getPoint(const QRect & rect,int angle)125*4882a593Smuzhiyun QPointF RollSwitchWidget::getPoint(const QRect &rect, int angle)
126*4882a593Smuzhiyun {
127*4882a593Smuzhiyun int r = rect.width()/2;
128*4882a593Smuzhiyun if(rect.width() >rect.height())
129*4882a593Smuzhiyun {
130*4882a593Smuzhiyun r = rect.height()/2;
131*4882a593Smuzhiyun }
132*4882a593Smuzhiyun
133*4882a593Smuzhiyun int x1 = r * qCos(angle * M_PI / 180);
134*4882a593Smuzhiyun int y1 = r * qSin(angle * M_PI /180);
135*4882a593Smuzhiyun
136*4882a593Smuzhiyun return QPointF(x1, y1);
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun }
139