ElaPromotionView 组件文档
概述
ElaPromotionView 是一个现代化的推广视图组件,提供了卡片切换、自动滚动、动画效果等特性。它适用于展示多个推广卡片的轮播展示。
特性
- 卡片切换
- 自动滚动
- 动画效果
- 主题适配
- 指示器
- 手势支持
- 无限循环
- 响应式布局
属性
基础属性
cpp
// 展开卡片宽度
Q_PROPERTY(int cardExpandWidth
READ getCardExpandWidth
WRITE setCardExpandWidth)
// 收起卡片宽度
Q_PROPERTY(int cardCollapseWidth
READ getCardCollapseWidth
WRITE setCardCollapseWidth)
// 当前索引
Q_PROPERTY(int currentIndex
READ getCurrentIndex
WRITE setCurrentIndex)
// 自动滚动
Q_PROPERTY(bool isAutoScroll
READ getIsAutoScroll
WRITE setIsAutoScroll)
// 滚动间隔
Q_PROPERTY(int autoScrollInterval
READ getAutoScrollInterval
WRITE setAutoScrollInterval)公共方法
卡片管理
cpp
// 添加推广卡片
void appendPromotionCard(
ElaPromotionCard* card
);动画系统
卡片切换动画
cpp
void _startCardGeometryAnimation(
ElaPromotionCard* card,
QRect start,
QRect end
) {
QPropertyAnimation* animation =
new QPropertyAnimation(
card, "geometry"
);
animation->setDuration(650);
animation->setStartValue(start);
animation->setEndValue(end);
animation->start();
}图片比例动画
cpp
void _startHorizontalCardPixmapRatioAnimation(
ElaPromotionCard* card,
qreal start,
qreal end
) {
QPropertyAnimation* animation =
new QPropertyAnimation(
card, "horizontalCardPixmapRatio"
);
animation->setDuration(650);
animation->setStartValue(start);
animation->setEndValue(end);
animation->start();
}渲染系统
指示器渲染
cpp
void paintEvent() {
// 计算起始点
QPoint startPoint = isCountOdd ?
QPoint(width/2 - count/2 * spacing,
height - margin/2) :
QPoint(width/2 - count/2 * spacing
- spacing/2, height - margin/2);
// 绘制指示器
for (int i = 0; i < count; i++) {
if (i == currentIndex) {
painter.drawEllipse(
startPoint + i * spacing,
3.5, 3.5
);
} else {
painter.drawEllipse(
startPoint + i * spacing,
2.5, 2.5
);
}
}
}使用示例
基础用法
1. 创建视图
cpp
// 创建视图
ElaPromotionView* view =
new ElaPromotionView(this);
// 设置卡片宽度
view->setCardExpandWidth(600);
view->setCardCollapseWidth(300);
// 添加卡片
view->appendPromotionCard(card1);
view->appendPromotionCard(card2);
view->appendPromotionCard(card3);2. 自动滚动
cpp
// 启用自动滚动
view->setIsAutoScroll(true);
view->setAutoScrollInterval(5000);
// 禁用自动滚动
view->setIsAutoScroll(false);注意事项
- 继承自 QWidget
- 自动处理主题切换
- 动画时长650ms
- 智能内存管理
- 事件处理
- 性能优化
- 主题适配
- 样式继承
最佳实践
- 合理设置宽度
- 控制卡片数量
- 优化图片大小
- 注意性能影响
- 统一交互方式
- 保持样式一致
- 动画流畅性
- 响应式布局
相关组件
- QWidget: 基类
- ElaPromotionCard: 卡片组件
- ElaTheme: 主题管理
- QPropertyAnimation: 动画系统