菜单

STTRoller使用手册

下载

STTRoller.h 使用手册

STTRoller 是滚轮选择器,使用 id/name 键值表保存选项。它支持内部 JSON、表变量和普通变量双向绑定。

1. 创建

cpp 复制代码
#include "widgets/STTRoller.h"

using namespace stt;

STTRoller* roller = new STTRoller(getRuntime(), parent, "rollerHour");
roller->setMainArg(
    20, 20, 100, 180,
    0,
    R"([{"id":"0","name":"00"},{"id":"1","name":"01"}])",
    0,
    true
);

实现差异:setMainArg 的 mode 参数当前没有使用;setOptions 和表更新都使用 LV_ROLLER_MODE_NORMAL。因此传 mode=1 也不会启用循环模式。

2. 样式和可见行

cpp 复制代码
roller->setMainStyle(6, 0xffffff, 0xf5f5f5, 1,
                     255, 1, 0xcccccc, 0, 0);
roller->setSelectedStyle(0, 0x1687d9, 0x1687d9, 0, 255);
roller->setFontStyle(0x333333, 16, "",
                     0xffffff, 18, "", 0, 1);
roller->setVisibleRowCount(5);

当前 setFontStyle 只有在 fontname1/fontname2 非空时才同时设置该部分的字体和颜色。传空字体名不会应用 c1/c2,这是与默认参数直觉不同的地方;若要改颜色,应给出有效字体名。

3. 选项与选择

cpp 复制代码
roller->setOptions(options, 0);
roller->setSelected(1, true);

int count = roller->getOptionCnt();
int index = roller->getSelectedIndex();
string text = roller->getSelectedText();
string value = roller->getSelectedValue();
TTable* data = roller->getData();

selectedIndex 是行序号。getSelectedText 从数据源第 1 列取 name,getSelectedValue 从第 0 列取 id。getData 为借用指针。

setSelected 总是以动画方式滚动,即使 notify=false。notify=true 时同步内部表/绑定表 selectedIndex,或把 id 写回普通变量,再发 VALUE_CHANGED。

越界 index 会静默忽略。

4. 变量绑定

表变量:

cpp 复制代码
roller->bindData(tableVariable);

显示内容来自表的 label 列,选项之间用换行传给 LVGL;表 selectedIndex 会同步到滚轮。

普通变量:

cpp 复制代码
roller->setOptions(options, 0);
roller->bindData(getRuntime()->getIVarMgr()->get("HourId"));

普通变量值按第 0 列匹配,命中时切换选中项。

当前 onDataChanged 的类型条件中,第三项检查的是 widgetInfo->bindVar->type(),而不是 data->type(),且未先检查 bindVar 是否为空。框架正常绑定路径通常有值,但业务不应直接以空绑定调用 onDataChanged。

5. 确认

开启 setConfirm 后,取消恢复 lastSelectedIndex,确认将当前 LVGL 序号写回并触发回调。onConfirm 是内部方法。

6. 完整示例

cpp 复制代码
STTRoller* speed = new STTRoller(getRuntime(), panel, "rollerSpeed");
speed->setMainArg(
    20, 20, 120, 180, 0,
    R"([{"id":"500","name":"500 rpm"},
        {"id":"1000","name":"1000 rpm"},
        {"id":"1500","name":"1500 rpm"}])",
    1,
    true
);
speed->setVisibleRowCount(3);
speed->setConfirm(true, "确认修改速度?");

Ivariable value = getRuntime()->getIVarMgr()->get("SpeedSet");
if (value != nullptr) speed->bindData(value);

7. 注意事项

  • mode 参数当前无效,只有普通模式。
  • setFontStyle 传空字体名时不会改对应颜色。
  • getData 返回非拥有指针。
  • 选项 JSON 应使用 id/name 格式。
  • setSelected(notify=true) 会发事件,避免回调递归。
  • 不直接调用 onDataChanged/onConfirm。
最近修改: 2026-10-21Powered by