Skip to content

ElaPivot 组件文档

概述

ElaPivot 是一个现代化的轴心导航组件,提供了水平滚动、动画效果、主题适配等特性。它适用于创建类似标签页切换的导航界面。

特性

  • 水平滚动
  • 动画效果
  • 主题适配
  • 手势支持
  • 标记指示
  • 悬停效果
  • 点击反馈
  • 自定义间距

属性

基础属性

cpp
// 文本大小
Q_PROPERTY(int textPixelSize READ getTextPixelSize 
    WRITE setTextPixelSize)

// 当前索引
Q_PROPERTY(int currentIndex READ getCurrentIndex 
    WRITE setCurrentIndex)

// 项目间距
Q_PROPERTY(int pivotSpacing READ getPivotSpacing 
    WRITE setPivotSpacing)

// 标记宽度
Q_PROPERTY(int markWidth READ getMarkWidth 
    WRITE setMarkWidth)

方法

项目管理

cpp
// 添加项目
void appendPivot(QString pivotTitle);

// 移除项目
void removePivot(QString pivotTitle);

信号

cpp
// 点击信号
Q_SIGNAL void pivotClicked(int index);

// 双击信号
Q_SIGNAL void pivotDoubleClicked(int index);

使用示例

基础用法

1. 创建导航

cpp
// 创建导航组件
ElaPivot* pivot = new ElaPivot(this);
pivot->setFixedHeight(40);

// 添加项目
pivot->appendPivot("首页");
pivot->appendPivot("音乐");
pivot->appendPivot("视频");
pivot->appendPivot("设置");

// 设置当前项
pivot->setCurrentIndex(0);

2. 自定义样式

cpp
// 设置文本大小
pivot->setTextPixelSize(20);

// 设置间距
pivot->setPivotSpacing(8);

// 设置标记宽度
pivot->setMarkWidth(75);

高级用法

1. 处理点击事件

cpp
connect(pivot, &ElaPivot::pivotClicked, 
    this, [=](int index) {
    // 处理点击事件
    switch(index) {
        case 0:
            showHomePage();
            break;
        case 1:
            showMusicPage();
            break;
        // ...
    }
});

动画系统

标记动画

cpp
void doCurrentIndexChangedAnimation(
    const QModelIndex& index) {
    // 创建位置动画
    QPropertyAnimation* markAnimation = 
        new QPropertyAnimation(this, "markX");
    markAnimation->setDuration(300);
    markAnimation->setEasingCurve(
        QEasingCurve::InOutSine);
    
    // 创建宽度动画
    QPropertyAnimation* widthAnimation =
        new QPropertyAnimation(this, 
            "markAnimationWidth");
    widthAnimation->setDuration(300);
    
    // 启动动画组
    QParallelAnimationGroup* group = 
        new QParallelAnimationGroup(this);
    group->addAnimation(markAnimation);
    group->addAnimation(widthAnimation);
    group->start();
}

样式系统

项目样式

cpp
void drawControl(CE_ItemViewItem) {
    // 绘制文本
    if (pressed) {
        painter->setPen(pressTextColor);
    } else if (current || hovered) {
        painter->setPen(activeTextColor);
    } else {
        painter->setPen(normalTextColor);
    }
    
    painter->drawText(textRect, 
        Qt::AlignCenter, text);
}

标记样式

cpp
void paintEvent() {
    // 绘制标记
    painter.setPen(Qt::NoPen);
    painter.setBrush(markColor);
    painter.drawRoundedRect(
        markRect, 3, 3);
}

注意事项

  1. 继承自 QWidget
  2. 使用 MVC 模式
  3. 自动内存管理
  4. 动画时长300ms
  5. 手势支持
  6. 性能优化
  7. 主题适配
  8. 样式继承

最佳实践

  1. 合理设置间距
  2. 控制项目数量
  3. 处理长文本
  4. 注意性能影响
  5. 统一交互方式
  6. 保持样式一致
  7. 动画流畅性
  8. 响应式布局

相关组件

  • QWidget: 基类
  • QListView: 视图组件
  • QPropertyAnimation: 动画系统
  • ElaTheme: 主题管理