STTBar 是直线型进度条/柱状条,支持普通、对称和范围模式,继承 STTWidget 的位置、事件、显隐和变量绑定能力。
#include "widgets/STTBar.h"
using namespace stt;
STTBar* bar = new STTBar(getRuntime(), parent, "barLevel");
bar->setMainArg(20, 40, 300, 36, 50, 0, 100);
bar->setMainStyle(8, 0xeeeeee, 0xdddddd, 2,
1, 0xaaaaaa, 0, 0x000000, "");
bar->setIndicStyle(8, 0x16a05d, 0x55c98b, 2,
0, 0x000000, "");
| 分组 | 方法 |
|---|---|
| 初始化 | setMainArg、setMainStyle、setIndicStyle |
| 数值 | setValue、setStartValue、getValue、getStartValue |
| 范围 | setRange、setVariableLimit、getMinValue、getMaxValue |
| 模式 | setMode、getMode |
| 变量响应 | onDataChanged |
void setMainArg(
int x = 0, int y = 0, int w = 200, int h = 50,
int value = 50, int min = 0, int max = 100
);
当前实现先 setValue,再 setRange。若初值超出默认范围,LVGL 可能先截断,因此要求精确初始化时建议再调用一次:
bar->setRange(-100, 100)->setValue(-30, false);
setMainStyle 配置背景条、边框、阴影和可选图片;setIndicStyle 配置 LV_PART_INDICATOR。
bar->setMainStyle(
9999, 0xdddddd, 0xdddddd, 0,
0, 0x000000, 0, 0x000000, "res/bar_bg.png"
);
bar->setIndicStyle(
9999, 0x1a2b3c, 0x1a2b3c, 0,
0, 0x000000, "res/bar_value.png"
);
图片仅在 FileUtil::fileExists 为 true 时设置。主背景有图片时背景和边框透明;指示图片代码设置图片源时没有显式传 indicator selector,这是当前实现细节,若显示位置不正确,应优先使用纯色样式或检查 SDK 版本。
bar->getStyle()->p_anim->setTime(500);
bar->setValue(75, true);
anim=true 只在动画时间已配置时产生可见过渡。绑定变量的高频变化不建议开动画,否则会持续重启动画。
模式:
| mode | 说明 |
|---|---|
| 0 | 普通,从最小值方向绘制 |
| 1 | 对称,从 0 向两侧绘制,范围应跨越 0 |
| 2 | 范围,从 start value 绘制到当前 value |
bar->setMode(2)
->setRange(0, 100)
->setStartValue(25, false)
->setValue(80, true);
STTBar 不校验 mode,值会直接传给 LVGL。getMode 返回当前底层模式。
bar->bindData(getRuntime()->getIVarMgr()->get("TankLevel"));
bar->setVariableLimit("TankLevelLow", "TankLevelHigh");
onDataChanged 将绑定变量转换为整数并 setValue。上下限变量变化时保留另一端范围。
当前 setVariableLimit 没有检查变量是否存在,错误变量名可能导致空指针访问;空字符串只表示该端不处理,不会解除之前的连接。
int value = bar->getValue();
int start = bar->getStartValue();
int minv = bar->getMinValue();
int maxv = bar->getMaxValue();
int mode = bar->getMode();
这些值来自 LVGL 当前状态,而不一定等于最后一次传入值,例如超出范围时可能已被截断。