Skip to content

ElaInteractiveCard 组件文档 ​

概述 ​

ElaInteractiveCard 是一个交互式卡片组件,继承自 QPushButton。它提供了图标、标题、副标题的组合展示,支持多种图标样式和主题适配。

特性 ​

  • 鼠标悬停效果
  • 多种图标样式
  • 标题和副标题
  • 圆角边框
  • 主题适配
  • 抗锯齿渲染
  • 自动布局
  • 文本自动换行

属性 ​

基础属性 ​

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

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

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

// 图标
Q_PROPERTY(QPixmap cardPixmap READ getCardPixmap 
    WRITE setCardPixmap)

样式属性 ​

cpp
// 标题字号
Q_PROPERTY(int titlePixelSize READ getTitlePixelSize 
    WRITE setTitlePixelSize)

// 副标题字号
Q_PROPERTY(int subTitlePixelSize 
    READ getSubTitlePixelSize 
    WRITE setSubTitlePixelSize)

// 标题间距
Q_PROPERTY(int titleSpacing READ getTitleSpacing 
    WRITE setTitleSpacing)

// 图标尺寸
Q_PROPERTY(QSize cardPixmapSize 
    READ getCardPixmapSize 
    WRITE setCardPixmapSize)

// 图标圆角
Q_PROPERTY(int cardPixmapBorderRadius 
    READ getCardPixmapBorderRadius 
    WRITE setCardPixmapBorderRadius)

// 图标模式
Q_PROPERTY(ElaCardPixType::PixMode cardPixMode 
    READ getCardPixMode 
    WRITE setCardPixMode)

默认值 ​

  • 最小尺寸: 270x80
  • 边框圆角: 6px
  • 标题字号: 15px
  • 副标题字号: 12px
  • 图标尺寸: 64x64
  • 标题间距: 2px
  • 图标圆角: 6px
  • 图标模式: Ellipse

使用示例 ​

基础用法 ​

1. 创建卡片 ​

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

// 设置文本
card->setTitle("主标题");
card->setSubTitle("副标题描述");

// 设置图标
card->setCardPixmap(QPixmap(":/icons/avatar.png"));

// 连接点击信号
connect(card, &ElaInteractiveCard::clicked, 
    this, &MyWidget::onCardClicked);

2. 自定义样式 ​

cpp
// 设置图标样式
card->setCardPixMode(ElaCardPixType::PixMode::RoundedRect);
card->setCardPixmapBorderRadius(10);
card->setCardPixmapSize(QSize(48, 48));

// 设置文本样式
card->setTitlePixelSize(16);
card->setSubTitlePixelSize(13);
card->setTitleSpacing(4);

高级用法 ​

1. 图标模式 ​

cpp
// 圆形图标
card->setCardPixMode(ElaCardPixType::PixMode::Ellipse);

// 圆角矩形
card->setCardPixMode(ElaCardPixType::PixMode::RoundedRect);

// 默认矩形
card->setCardPixMode(ElaCardPixType::PixMode::Default);

2. 主题适配 ​

cpp
// 连接主题变化信号
connect(ElaTheme::getInstance(), 
    &ElaTheme::themeModeChanged,
    this, [=](ElaThemeType::ThemeMode mode) {
        update();
});

布局算法 ​

组件布局 ​

cpp
// 图标位置
int iconX = 10;
int iconY = (height() - iconSize.height()) / 2;

// 文本起始位置
int textStartX = iconSize.width() + 26;
int textWidth = width() - textStartX;

// 标题区域
QRect titleRect(
    textStartX,
    rect().y(),
    textWidth,
    height() / 2 - titleSpacing
);

// 副标题区域
QRect subTitleRect(
    textStartX,
    height() / 2 + titleSpacing,
    textWidth,
    height() / 2 - titleSpacing
);

注意事项 ​

  1. 继承自 QPushButton
  2. 自动处理鼠标事件
  3. 支持文本自动换行
  4. 图标居中显示
  5. 主题切换自动更新
  6. 抗锯齿渲染
  7. 标题自动加粗
  8. 性能优化

最佳实践 ​

  1. 合理设置文本长度
  2. 选择合适的图标尺寸
  3. 注意图标质量
  4. 控制卡片大小
  5. 处理主题切换
  6. 优化点击响应
  7. 合理使用间距
  8. 保持样式一致

相关组件 ​

  • QPushButton: 基类
  • QPainter: 绘制系统
  • QPainterPath: 路径绘制
  • ElaTheme: 主题管理