Skip to content

ElaSuggestBox 组件文档 ​

概述 ​

ElaSuggestBox 是一个现代化的搜索建议框组件,提供了实时搜索、建议列表、动画效果等特性。它适用于需要搜索和建议功能的场景。

特性 ​

  • 实时搜索
  • 建议列表
  • 动画效果
  • 主题适配
  • 图标支持
  • 自定义数据
  • 大小写敏感
  • 阴影效果

属性 ​

基础属性 ​

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

// 大小写敏感
Q_PROPERTY(Qt::CaseSensitivity caseSensitivity 
    READ getCaseSensitivity 
    WRITE setCaseSensitivity)

公共方法 ​

建议管理 ​

cpp
// 添加建议
void addSuggestion(
    const QString& suggestText,
    const QVariantMap& suggestData = {}
);

// 添加带图标的建议
void addSuggestion(
    ElaIconType::IconName icon,
    const QString& suggestText,
    const QVariantMap& suggestData = {}
);

// 移除建议
void removeSuggestion(
    const QString& suggestText
);
void removeSuggestion(int index);

// 设置占位符
void setPlaceholderText(
    const QString& placeholderText
);

信号 ​

cpp
// 建议被点击
Q_SIGNAL void suggestionClicked(
    QString suggestText, 
    QVariantMap suggestData
);

动画系统 ​

大小动画 ​

cpp
void _startSizeAnimation(
    QSize oldSize, 
    QSize newSize
) {
    QPropertyAnimation* animation = 
        new QPropertyAnimation(
            widget, "size"
        );
    animation->setDuration(300);
    animation->setEasingCurve(
        QEasingCurve::InOutSine
    );
    animation->setStartValue(oldSize);
    animation->setEndValue(newSize);
    animation->start();
}

展开/收起动画 ​

cpp
void _startExpandAnimation() {
    QPropertyAnimation* animation = 
        new QPropertyAnimation(
            view, "pos"
        );
    animation->setDuration(300);
    animation->setStartValue(startPos);
    animation->setEndValue(endPos);
    animation->start();
}

渲染系统 ​

容器渲染 ​

cpp
void paintEvent() {
    // 绘制阴影
    theme->drawEffectShadow(
        &painter, rect, 6, 8
    );
    
    // 绘制背景
    painter.setPen(borderColor);
    painter.setBrush(baseColor);
    painter.drawRoundedRect(
        foregroundRect, 8, 8
    );
}

使用示例 ​

基础用法 ​

1. 创建搜索框 ​

cpp
// 创建搜索框
ElaSuggestBox* box = 
    new ElaSuggestBox(this);

// 设置占位符
box->setPlaceholderText("搜索...");

// 设置大小写敏感
box->setCaseSensitivity(
    Qt::CaseInsensitive
);

2. 添加建议 ​

cpp
// 添加文本建议
box->addSuggestion("建议1");

// 添加带图标的建议
box->addSuggestion(
    ElaIconType::Search,
    "建议2"
);

// 添加带数据的建议
QVariantMap data;
data["key"] = "value";
box->addSuggestion("建议3", data);

3. 处理事件 ​

cpp
// 建议点击
connect(box, 
    &ElaSuggestBox::suggestionClicked,
    this, [=](QString text, 
        QVariantMap data) {
    qDebug() << "Clicked:" << text;
    qDebug() << "Data:" << data;
});

注意事项 ​

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

最佳实践 ​

  1. 合理设置大小
  2. 控制建议数量
  3. 优化搜索逻辑
  4. 注意性能影响
  5. 统一交互方式
  6. 保持样式一致
  7. 动画流畅性
  8. 响应式布局

相关组件 ​

  • QWidget: 基类
  • ElaLineEdit: 输入框组件
  • ElaBaseListView: 列表组件
  • ElaTheme: 主题管理
  • QPropertyAnimation: 动画系统