xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/wifi/switchwidget.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "switchwidget.h"
2 #include <QPainter>
3 #include<QPen>
4 #include <QMouseEvent>
5 #include <QDebug>
6 
SwitchWidget(QWidget * parent)7 SwitchWidget::SwitchWidget(QWidget *parent) : QWidget(parent),m_bOpen(false),
8     m_ratio(0.7)
9 {
10     this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
11 }
12 
setText(const QString & title)13 void SwitchWidget::setText(const QString &title)
14 {
15     m_text = title;
16 }
17 
text()18 QString SwitchWidget::text()
19 {
20     return m_text;
21 }
22 
isOpen()23 bool SwitchWidget::isOpen()
24 {
25     return m_bOpen;
26 }
27 
setTextRatio(qreal ratio)28 void SwitchWidget::setTextRatio(qreal ratio)
29 {
30     if(ratio< 0.5)
31     {
32         m_ratio =0.5;
33     }
34     if(ratio >0.8)
35     {
36         m_ratio= 0.8;
37     }
38 }
39 
setOpen(bool bOpen)40 void SwitchWidget::setOpen(bool bOpen)
41 {
42     m_bOpen =bOpen;
43     this->update();
44     click(bOpen);
45 }
46 
paintEvent(QPaintEvent * e)47 void SwitchWidget::paintEvent(QPaintEvent *e)
48 {
49     QPainter painter(this);
50     painter.setRenderHint(QPainter::Antialiasing);
51     QRectF visualRect = this->rect().adjusted(1, 1, -1, -1);
52     qreal textWidth = visualRect.width()*m_ratio;
53     qreal textHeight = visualRect.height();
54 
55     QRectF tectRect = QRectF(visualRect.x(), visualRect.y(), textWidth, textHeight);
56     QTextOption option( Qt::AlignVCenter);
57     QRectF fixTextRect = painter.boundingRect(tectRect, m_text,option);
58     painter.drawText(fixTextRect, m_text);
59 
60     QRectF switchRect(visualRect.x() + textWidth,
61                      visualRect.y(),
62                      visualRect.width()-textWidth,
63                      visualRect.height());
64 
65     m_rect = switchRect;
66     m_bOpen? painter.setBrush(Qt::blue) : painter.setBrush(Qt::gray);
67     painter.setPen(Qt::transparent);
68 
69     int radius = switchRect.height()/2;
70     painter.drawRoundedRect(switchRect, radius, radius);
71 
72     QPoint center(switchRect.x() +radius,
73                   switchRect.y() +radius);
74 
75     if(m_bOpen)
76     {
77         center.setX(switchRect.x() +switchRect.width()-radius);
78     }
79     painter.setBrush(Qt::white);
80     painter.drawEllipse(center,
81                         visualRect.height()/2 -radius/6,
82                         visualRect.height()/2 -radius/6);
83 }
84 
mousePressEvent(QMouseEvent * e)85 void SwitchWidget::mousePressEvent(QMouseEvent *e)
86 {
87     QWidget::mousePressEvent(e);
88     if(m_rect.contains(e->pos()))
89     {
90         m_bOpen = !m_bOpen;
91         this->update();
92         emit click(m_bOpen);
93         qDebug()<<"click ="<< m_bOpen;
94     }else{
95         qDebug()<<"not button rect";
96     }
97 }
98 
sizeHint() const99 QSize SwitchWidget::sizeHint() const
100 {
101     return QSize(160, 25);
102 }
103