Skip to content

ElaPromotionCard 组件文档 ​

概述 ​

ElaPromotionCard 是一个现代化的推广卡片组件,提供了悬浮效果、点击动画、主题适配等特性。它适用于展示产品推广、活动宣传等内容。

特性 ​

  • 悬浮效果
  • 点击动画
  • 主题适配
  • 圆角边框
  • 阴影效果
  • 图片支持
  • 渐变背景
  • 多层文本

属性 ​

基础属性 ​

cpp
// 边框圆角
Q_PROPERTY(int borderRadius READ getBorderRadius 
    WRITE setBorderRadius)

// 卡片图片
Q_PROPERTY(QPixmap cardPixmap READ getCardPixmap 
    WRITE setCardPixmap)

// 图片比例
Q_PROPERTY(qreal horizontalCardPixmapRatio 
    READ getHorizontalCardPixmapRatio 
    WRITE setHorizontalCardPixmapRatio)
Q_PROPERTY(qreal verticalCardPixmapRatio 
    READ getVerticalCardPixmapRatio 
    WRITE setVerticalCardPixmapRatio)

文本属性 ​

cpp
// 卡片标题
Q_PROPERTY(QString cardTitle READ getCardTitle 
    WRITE setCardTitle)

// 推广标题
Q_PROPERTY(QString promotionTitle 
    READ getPromotionTitle 
    WRITE setPromotionTitle)

// 主标题
Q_PROPERTY(QString title READ getTitle 
    WRITE setTitle)

// 副标题
Q_PROPERTY(QString subTitle READ getSubTitle 
    WRITE setSubTitle)

样式属性 ​

cpp
// 文本颜色
Q_PROPERTY(QColor cardTitleColor 
    READ getCardTitleColor 
    WRITE setCardTitleColor)
Q_PROPERTY(QColor promotionTitleColor 
    READ getPromotionTitleColor 
    WRITE setPromotionTitleColor)
Q_PROPERTY(QColor titleColor 
    READ getTitleColor 
    WRITE setTitleColor)
Q_PROPERTY(QColor subTitleColor 
    READ getSubTitleColor 
    WRITE setSubTitleColor)

// 文本大小
Q_PROPERTY(int cardTitlePixelSize 
    READ getCardTitlePixelSize 
    WRITE setCardTitlePixelSize)
Q_PROPERTY(int promotionTitlePixelSize 
    READ getPromotionTitlePixelSize 
    WRITE setPromotionTitlePixelSize)
Q_PROPERTY(int titlePixelSize 
    READ getTitlePixelSize 
    WRITE setTitlePixelSize)
Q_PROPERTY(int subTitlePixelSize 
    READ getSubTitlePixelSize 
    WRITE setSubTitlePixelSize)

信号 ​

cpp
// 卡片点击
Q_SIGNAL void promotionCardClicked();

动画系统 ​

悬浮动画 ​

cpp
void _startHoverOpacityAnimation(bool isVisible) {
    QPropertyAnimation* animation = 
        new QPropertyAnimation(this, "opacity");
    animation->setDuration(250);
    animation->setStartValue(currentOpacity);
    animation->setEndValue(isVisible ? 1 : 0);
    animation->start();
}

点击动画 ​

cpp
void mousePressEvent() {
    QPropertyAnimation* animation = 
        new QPropertyAnimation(this, "pressRadius");
    animation->setDuration(350);
    animation->setStartValue(0);
    animation->setEndValue(longestDistance);
    animation->setEasingCurve(
        QEasingCurve::OutQuad);
    animation->start();
}

渲染系统 ​

背景渲染 ​

cpp
void paintEvent() {
    // 绘制阴影
    eTheme->drawEffectShadow(
        &painter, rect(), 
        shadowWidth, borderRadius
    );
    
    // 绘制背景图
    painter.drawPixmap(
        foregroundRect,
        cardPixmap, 
        sourceRect
    );
    
    // 绘制渐变
    painter.setBrush(*gradient);
    painter.drawEllipse(
        center, radius, radius
    );
}

文本渲染 ​

cpp
void paintEvent() {
    // 卡片标题
    painter.setFont(cardTitleFont);
    painter.drawText(rect, cardTitle);
    
    // 推广标题
    painter.drawRoundedRect(
        promotionTitleBaseRect, 8, 8);
    painter.drawText(rect, promotionTitle);
    
    // 主标题
    painter.drawText(titleRect, title);
    
    // 副标题
    painter.drawText(subTitleRect, subTitle);
}

使用示例 ​

基础用法 ​

1. 创建卡片 ​

cpp
// 创建卡片
ElaPromotionCard* card = 
    new ElaPromotionCard(this);

// 设置图片
card->setCardPixmap(QPixmap(":/image.png"));
card->setHorizontalCardPixmapRatio(0.8);
card->setVerticalCardPixmapRatio(0.8);

// 设置文本
card->setCardTitle("卡片标题");
card->setPromotionTitle("推广标题");
card->setTitle("主标题");
card->setSubTitle("副标题文本");

2. 自定义样式 ​

cpp
// 设置颜色
card->setCardTitleColor(Qt::white);
card->setPromotionTitleColor(Qt::white);
card->setTitleColor(Qt::white);
card->setSubTitleColor(Qt::white);

// 设置字号
card->setCardTitlePixelSize(22);
card->setPromotionTitlePixelSize(12);
card->setTitlePixelSize(25);
card->setSubTitlePixelSize(16);

注意事项 ​

  1. 继承自 QWidget
  2. 自动处理主题切换
  3. 动画时长250ms
  4. 智能内存管理
  5. 事件处理
  6. 性能优化
  7. 主题适配
  8. 样式继承

最佳实践 ​

  1. 合理设置大小
  2. 控制文本长度
  3. 优化图片大小
  4. 注意性能影响
  5. 统一交互方式
  6. 保持样式一致
  7. 动画流畅性
  8. 响应式布局

相关组件 ​

  • QWidget: 基类
  • ElaTheme: 主题管理
  • QPropertyAnimation: 动画系统
  • QRadialGradient: 渐变系统