Skip to content

ElaStatusBar 组件文档 ​

概述 ​

ElaStatusBar 是一个现代化的状态栏组件,继承自 QStatusBar。它提供了自定义样式、主题适配、分隔符等特性。

特性 ​

  • 自定义样式
  • 主题适配
  • 分隔符绘制
  • 固定高度
  • 边距控制
  • 背景绘制
  • 抗锯齿
  • 性能优化

基础设置 ​

cpp
// 创建时的基础设置
setFixedHeight(28);
setContentsMargins(20, 0, 0, 0);
setStyle(new ElaStatusBarStyle(style()));

样式系统 ​

状态栏样式 ​

cpp
void drawPrimitive(
    PrimitiveElement element,
    const QStyleOption* option,
    QPainter* painter,
    const QWidget* widget
) const override {
    switch (element) {
    case PE_PanelStatusBar:
        // 绘制背景
        painter->setPen(
            ElaThemeColor(themeMode, BasicBorder)
        );
        painter->setBrush(
            ElaThemeColor(themeMode, BasicBaseAlpha)
        );
        painter->drawRect(statusBarRect);
        break;
        
    case PE_FrameStatusBarItem:
        // 绘制分隔符
        painter->setBrush(
            ElaThemeColor(themeMode, PrimaryNormal)
        );
        painter->drawRoundedRect(
            separatorRect, 2, 2
        );
        break;
    }
}

使用示例 ​

基础用法 ​

1. 创建状态栏 ​

cpp
// 创建状态栏
ElaStatusBar* statusBar = 
    new ElaStatusBar(this);

// 添加永久信息
statusBar->addPermanentWidget(
    new QLabel("永久信息")
);

// 显示临时信息
statusBar->showMessage(
    "临时信息", 
    3000  // 显示3秒
);

2. 添加部件 ​

cpp
// 添加标签
QLabel* label = new QLabel("状态:");
statusBar->addWidget(label);

// 添加进度条
QProgressBar* progress = 
    new QProgressBar();
progress->setFixedWidth(100);
statusBar->addWidget(progress);

// 添加按钮
QPushButton* button = 
    new QPushButton("操作");
statusBar->addWidget(button);

高级用法 ​

1. 自定义分隔符 ​

cpp
// 设置分隔符可见性
statusBar->setSizeGripEnabled(false);

// 添加带分隔符的部件
QLabel* label = new QLabel("CPU:");
statusBar->addPermanentWidget(
    label, 
    0  // 拉伸因子
);

// 移除分隔符
statusBar->removeWidget(widget);

2. 状态更新 ​

cpp
// 定时更新状态
QTimer* timer = new QTimer(this);
connect(timer, &QTimer::timeout, 
    this, [=]() {
    // 更新状态信息
    statusBar->showMessage(
        QString("当前时间: %1")
        .arg(QTime::currentTime()
            .toString())
    );
});
timer->start(1000);

样式定制 ​

1. 背景绘制 ​

cpp
void drawBackground(QPainter* painter) {
    painter->setRenderHints(
        QPainter::Antialiasing | 
        QPainter::TextAntialiasing
    );
    
    // 绘制背景
    painter->setPen(
        ElaThemeColor(themeMode, BasicBorder)
    );
    painter->setBrush(
        ElaThemeColor(themeMode, BasicBaseAlpha)
    );
    painter->drawRect(rect());
}

2. 分隔符绘制 ​

cpp
void drawSeparator(
    QPainter* painter, 
    const QRect& rect
) {
    painter->setPen(Qt::NoPen);
    painter->setBrush(
        ElaThemeColor(themeMode, PrimaryNormal)
    );
    
    // 计算分隔符区域
    QRectF separatorRect(
        rect.right() - 3,
        rect.y() + rect.height() * 0.1,
        3,
        rect.height() * 0.8
    );
    
    // 绘制圆角分隔符
    painter->drawRoundedRect(
        separatorRect, 
        2, 
        2
    );
}

注意事项 ​

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

最佳实践 ​

  1. 合理设置高度
  2. 控制部件数量
  3. 优化更新频率
  4. 注意性能
  5. 统一交互
  6. 保持一致
  7. 动画流畅
  8. 响应式布局

相关组件 ​

  • QStatusBar: 基类
  • ElaStatusBarStyle: 样式组件
  • ElaTheme: 主题系统
  • QLabel: 标签组件