#include "SwitchButton.h"
SwitchButton::SwitchButton(QWidget *parent)
: QWidget(parent)
, m_bChecked(false)
, m_bShowText(true)
{
this->setMinimumSize(30, 20);
QFont font;
font.setFamily("Consolas");
font.setPointSize(15);
this->setFont(font);
m_timeLine.setDuration(200);
m_timeLine.setUpdateInterval(10);
m_timeLine.setCurveShape(QTimeLine::LinearCurve);
connect(&m_timeLine, &QTimeLine::valueChanged, this, [=](qreal value) {
m_curPos.setX((m_onPos.x() - m_offPos.x()) * value + m_offPos.x());
m_curPos.setY((m_onPos.y() - m_offPos.y()) * value + m_offPos.y());
update();
});
}
SwitchButton::~SwitchButton()
{
}
QSize SwitchButton::sizeHint() const
{
return QSize(60, 30);
}
void SwitchButton::resizeEvent(QResizeEvent *event)
{
QRect rect;
rect.setWidth(this->geometry().width() - 1);
rect.setHeight(this->geometry().height() - 1);
int radius = rect.height() / 2.0;
m_onPos.setX(rect.width() - radius);
m_onPos.setY(rect.height() * 0.5);
m_offPos.setX(radius);
m_offPos.setY(rect.height() * 0.5);
if (m_bChecked)
{
m_curPos = m_onPos;
}
else
{
m_curPos = m_offPos;
}
}
void SwitchButton::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QRect rect;
rect.setWidth(this->geometry().width() - 1);
rect.setHeight(this->geometry().height() - 1);
int radius = rect.height() / 2.0;
painter.setPen(Qt::NoPen);
if (m_bChecked)
{
painter.setBrush(QBrush(QColor(0, 255, 0)));
}
else
{
painter.setBrush(QBrush(QColor(200, 200, 200)));
}
painter.drawEllipse(QPoint(radius, rect.height() * 0.5), radius, radius);
painter.drawEllipse(QPoint(rect.width() - radius, rect.height() * 0.5), radius, radius);
painter.drawRect(radius, 0, rect.width() - radius * 2, rect.height());
if (m_bShowText)
{
painter.setPen(QPen(QColor(255, 255, 255)));
if (m_bChecked)
{
painter.drawText(QRect(0, 0, rect.width() * 0.5, rect.height()), "ON", QTextOption(Qt::AlignHCenter | Qt::AlignVCenter));
}
else
{
painter.drawText(QRect(rect.width() * 0.5, 0, rect.width() * 0.5, rect.height()), "OFF", QTextOption(Qt::AlignHCenter | Qt::AlignVCenter));
}
}
painter.setPen(Qt::NoPen);
painter.setBrush(QBrush(QColor(255, 255, 255)));
if (m_bChecked)
{
int circleRadius = radius - 3;
painter.drawEllipse(m_curPos, circleRadius, circleRadius);
}
else
{
int circleRadius = radius - 3;
painter.drawEllipse(m_curPos, circleRadius, circleRadius);
}
}
void SwitchButton::mousePressEvent(QMouseEvent *event)
{
}
void SwitchButton::mouseMoveEvent(QMouseEvent *event)
{
}
void SwitchButton::mouseReleaseEvent(QMouseEvent *event)
{
if (m_timeLine.state() != QTimeLine::Running)
{
m_bChecked = !m_bChecked;
if (m_bChecked)
{
m_timeLine.setDirection(QTimeLine::Forward);
m_timeLine.start();
}
else
{
m_timeLine.setDirection(QTimeLine::Backward);
m_timeLine.start();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
QtWidgetsApplication1.rar (11个子文件)
QtWidgetsApplication1
QtWidgetsApplication1
QtWidgetsApplication1.vcxproj 5KB
QtWidgetsApplication1.h 282B
main.cpp 213B
QtWidgetsApplication1.ui 1KB
QtWidgetsApplication1.vcxproj.user 165B
SwitchButton.h 767B
QtWidgetsApplication1.vcxproj.filters 2KB
SwitchButton.cpp 3KB
QtWidgetsApplication1.qrc 81B
QtWidgetsApplication1.cpp 415B
QtWidgetsApplication1.sln 1KB
共 11 条
- 1
资源评论
昵称不能为空.
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功