ElaToggleSwitch 组件文档
概述
ElaToggleSwitch 是一个现代化的开关组件,提供了流畅的动画效果、主题适配、手势支持等特性。它适用于开关状态的切换场景。
特性
- 动画效果
- 主题适配
- 手势支持
- 圆角边框
- 悬浮效果
- 点击反馈
- 禁用状态
- 自适应大小
属性
基础属性
cpp
// 开关状态
void setIsToggled(bool isToggled);
bool getIsToggled() const;信号
cpp
// 状态改变
Q_SIGNAL void toggled(bool checked);动画系统
位置动画
cpp
void _startPosAnimation(
qreal startX,
qreal endX,
bool isToggle
) {
QPropertyAnimation* animation =
new QPropertyAnimation(
this, "circleCenterX"
);
animation->setStartValue(startX);
animation->setEndValue(endX);
animation->setEasingCurve(
QEasingCurve::InOutSine
);
animation->start();
}半径动画
cpp
void _startRadiusAnimation(
qreal startRadius,
qreal endRadius
) {
QPropertyAnimation* animation =
new QPropertyAnimation(
this, "circleRadius"
);
animation->setStartValue(startRadius);
animation->setEndValue(endRadius);
animation->setEasingCurve(
QEasingCurve::InOutSine
);
animation->start();
}渲染系统
背景渲染
cpp
void paintEvent() {
// 绘制背景路径
QPainterPath path;
path.moveTo(width - height - margin,
height - margin);
path.arcTo(rightRect, -90, 180);
path.lineTo(height/2 + margin, margin);
path.arcTo(leftRect, 90, 180);
path.closeSubpath();
// 设置样式
painter.setPen(isToggled ?
borderColor : borderDeepColor);
painter.setBrush(isEnabled ?
(isToggled ? primaryColor :
(hover ? hoverColor : baseColor))
: disableColor);
// 绘制背景
painter.drawPath(path);
}圆心渲染
cpp
void paintEvent() {
// 设置样式
painter.setPen(Qt::NoPen);
painter.setBrush(isEnabled ?
(isToggled ? textInvertColor :
centerColor)
: textDisableColor);
// 绘制圆心
painter.drawEllipse(
QPointF(circleCenterX, height/2),
circleRadius,
circleRadius
);
}使用示例
基础用法
1. 创建开关
cpp
// 创建开关
ElaToggleSwitch* toggle =
new ElaToggleSwitch(this);
// 设置状态
toggle->setIsToggled(true);
// 获取状态
bool isOn = toggle->getIsToggled();2. 处理事件
cpp
// 状态改变
connect(toggle, &ElaToggleSwitch::toggled,
this, [=](bool checked) {
qDebug() << "Toggled:" << checked;
});注意事项
- 继承自 QWidget
- 自动处理主题切换
- 动画时长250ms
- 智能内存管理
- 事件处理
- 性能优化
- 主题适配
- 样式继承
最佳实践
- 合理设置大小
- 注意性能影响
- 统一交互方式
- 保持样式一致
- 动画流畅性
- 响应式布局
- 优化用户体验
- 主题适配
相关组件
- QWidget: 基类
- ElaTheme: 主题管理
- QPropertyAnimation: 动画系统
- QPainterPath: 绘制系统