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
);
}注意事项
- 继承自 QStatusBar
- 自动处理主题切换
- 智能内存管理
- 事件处理
- 性能优化
- 主题适配
- 样式继承
- 部件管理
最佳实践
- 合理设置高度
- 控制部件数量
- 优化更新频率
- 注意性能
- 统一交互
- 保持一致
- 动画流畅
- 响应式布局
相关组件
- QStatusBar: 基类
- ElaStatusBarStyle: 样式组件
- ElaTheme: 主题系统
- QLabel: 标签组件