ElaSlider 组件文档
概述
ElaSlider 是一个现代化的滑块组件,继承自 QSlider。它提供了自定义样式、动画效果、主题适配等特性。
特性
- 自定义样式
- 动画效果
- 主题适配
- 平滑滑动
- 圆形滑块
- 渐变滑槽
- 悬浮效果
- 点击定位
构造函数
cpp
// 基础构造
explicit ElaSlider(
QWidget* parent = nullptr
);
// 指定方向构造
explicit ElaSlider(
Qt::Orientation orientation,
QWidget* parent = nullptr
);样式系统
滑块样式
cpp
void drawComplexControl(
ComplexControl control,
const QStyleOptionComplex* option,
QPainter* painter,
const QWidget* widget
) const override {
// 绘制滑槽
painter->setBrush(
ElaThemeColor(themeMode, BasicChute)
);
painter->drawRoundedRect(...);
// 绘制已滑过区域
painter->setBrush(
ElaThemeColor(themeMode, PrimaryNormal)
);
painter->drawRoundedRect(...);
// 绘制滑块
painter->setBrush(
ElaThemeColor(themeMode, BasicBase)
);
painter->drawEllipse(...);
}动画效果
cpp
void startRadiusAnimation(
qreal startRadius,
qreal endRadius,
QWidget* widget
) const {
// 创建动画
auto animation = new QPropertyAnimation(
this,
"circleRadius"
);
// 设置动画属性
animation->setEasingCurve(
QEasingCurve::InOutSine
);
animation->setStartValue(startRadius);
animation->setEndValue(endRadius);
// 启动动画
animation->start(
QAbstractAnimation::DeleteWhenStopped
);
}使用示例
基础用法
1. 创建滑块
cpp
// 创建水平滑块
ElaSlider* slider =
new ElaSlider(Qt::Horizontal, this);
// 设置范围
slider->setRange(0, 100);
// 设置步长
slider->setSingleStep(1);
// 设置页步长
slider->setPageStep(10);2. 值处理
cpp
// 连接值变化信号
connect(slider,
&ElaSlider::valueChanged,
this, [=](int value) {
// 处理值变化
});
// 设置当前值
slider->setValue(50);
// 获取当前值
int value = slider->value();高级用法
1. 自定义外观
cpp
// 设置方向
slider->setOrientation(Qt::Vertical);
// 设置刻度位置
slider->setTickPosition(
QSlider::TicksBothSides
);
// 设置刻度间隔
slider->setTickInterval(10);2. 事件处理
cpp
// 鼠标按下事件
void mousePressEvent(
QMouseEvent* event
) override {
if (event->button() == Qt::LeftButton) {
// 计算点击位置对应的值
double pos = event->pos().x() /
(double)width();
setValue(minimum() +
(maximum() - minimum()) * pos);
}
}样式定制
1. 尺寸设置
cpp
int pixelMetric(
PixelMetric metric,
const QStyleOption* option,
const QWidget* widget
) const override {
switch (metric) {
case PM_SliderLength:
return 20;
case PM_SliderThickness:
return 20;
default:
break;
}
return QProxyStyle::pixelMetric(
metric,
option,
widget
);
}2. 行为设置
cpp
int styleHint(
StyleHint hint,
const QStyleOption* option,
const QWidget* widget,
QStyleHintReturn* returnData
) const override {
if (hint == SH_Slider_AbsoluteSetButtons) {
return Qt::LeftButton;
}
return QProxyStyle::styleHint(
hint,
option,
widget,
returnData
);
}注意事项
- 继承自 QSlider
- 自动处理主题切换
- 智能内存管理
- 事件处理
- 性能优化
- 主题适配
- 样式继承
- 动画流畅
最佳实践
- 合理设置范围
- 优化步进值
- 控制动画时长
- 注意性能
- 统一交互
- 保持一致
- 动画流畅
- 响应式布局
相关组件
- QSlider: 基类
- ElaSliderStyle: 样式组件
- ElaTheme: 主题系统
- QPropertyAnimation: 动画系统