Skip to content

ElaPopularCard 组件文档 ​

概述 ​

ElaPopularCard 是一个现代化的卡片组件,提供了悬浮展开、动画效果、主题适配等特性。它适用于展示产品、文章等内容的预览卡片。

特性 ​

  • 悬浮展开
  • 动画效果
  • 主题适配
  • 圆角边框
  • 阴影效果
  • 图片支持
  • 按钮交互
  • 自适应布局

属性 ​

基础属性 ​

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

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

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

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

// 交互提示
Q_PROPERTY(QString interactiveTips 
    READ getInteractiveTips 
    WRITE setInteractiveTips)

// 详细文本
Q_PROPERTY(QString detailedText 
    READ getDetailedText 
    WRITE setDetailedText)

// 按钮文本
Q_PROPERTY(QString cardButtonText 
    READ getCardButtonText 
    WRITE setCardButtonText)

// 悬浮区域
Q_PROPERTY(QWidget* cardFloatArea 
    READ getCardFloatArea 
    WRITE setCardFloatArea)

// 悬浮图片
Q_PROPERTY(QPixmap cardFloatPixmap 
    READ getCardFloatPixmap 
    WRITE setCardFloatPixmap)

信号 ​

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

// 按钮点击
Q_SIGNAL void popularCardButtonClicked();

动画系统 ​

悬浮动画 ​

cpp
void showFloater() {
    // 位置动画
    QPropertyAnimation* geometryAnimation = 
        new QPropertyAnimation(this, "geometry");
    geometryAnimation->setDuration(300);
    geometryAnimation->setEasingCurve(
        QEasingCurve::OutQuad);
    
    // 透明度动画
    QPropertyAnimation* opacityAnimation = 
        new QPropertyAnimation(this, "opacity");
    opacityAnimation->setDuration(300);
    
    // 按钮动画
    QPropertyAnimation* buttonAnimation = 
        new QPropertyAnimation(button, "geometry");
    buttonAnimation->setDuration(300);
    
    // 启动动画组
    QParallelAnimationGroup* group = 
        new QParallelAnimationGroup(this);
    group->addAnimation(geometryAnimation);
    group->addAnimation(opacityAnimation);
    group->addAnimation(buttonAnimation);
    group->start();
}

样式系统 ​

卡片样式 ​

cpp
void paintEvent() {
    // 绘制阴影
    painter.setOpacity(hoverOpacity);
    eTheme->drawEffectShadow(
        &painter, shadowRect, 
        shadowWidth, borderRadius
    );
    
    // 绘制背景
    painter.setPen(hovered ? 
        hoverBorderColor : borderColor);
    painter.setBrush(backgroundColor);
    painter.drawRoundedRect(
        foregroundRect, 
        borderRadius, 
        borderRadius
    );
    
    // 绘制图片
    painter.setClipPath(pixPath);
    painter.drawPixmap(pixRect, 
        cardPixmap, 
        cardPixmap.rect()
    );
    
    // 绘制文本
    painter.drawText(titleRect, title);
    painter.drawText(subTitleRect, subTitle);
    painter.drawText(detailsRect, details);
}

使用示例 ​

基础用法 ​

1. 创建卡片 ​

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

// 设置内容
card->setCardPixmap(QPixmap(":/image.png"));
card->setTitle("标题文本");
card->setSubTitle("副标题文本");
card->setDetailedText("详细描述...");
card->setCardButtonText("查看详情");

// 设置悬浮区域
card->setCardFloatArea(this);

2. 处理事件 ​

cpp
// 卡片点击
connect(card, 
    &ElaPopularCard::popularCardClicked,
    this, [=]() {
    qDebug() << "Card clicked";
});

// 按钮点击
connect(card,
    &ElaPopularCard::popularCardButtonClicked,
    this, [=]() {
    qDebug() << "Button clicked";
});

注意事项 ​

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

最佳实践 ​

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

相关组件 ​

  • QWidget: 基类
  • ElaPushButton: 按钮组件
  • ElaTheme: 主题管理
  • QPropertyAnimation: 动画系统