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