菜单

STTButton.h 使用手册

下载

STTButton.h 使用手册

STTButton 同时承担功能键、图片按钮、开关元件和指示灯元件。它继承 STTWidget,可使用事件、确认、权限、蜂鸣、变量绑定、显隐和操作日志功能。

1. 类型与创建

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

using namespace stt;

STTButton* button = new STTButton(
    getRuntime(),
    parent,
    "btnStart",
    0
);
button->setMainArg(20, 20, 120, 48, true);

type:

值 用途
0 功能键,无状态图片要求
1 普通按钮元件
2 开关元件
3 指示灯元件

底层实际创建的是 lv_label,而不是 lv_btn,并给它增加可点击标志。不要把 object 强制转换为 lv_btn_t。

构造函数立即连接系统 Language 变量;该变量和 Runtime 必须已经存在。

2. 普通功能键

cpp 复制代码
button->setReleasedArg("启动", 0xffffff, "", 18, 0);
button->setReleasedStyle(
    6, 255, 0x198754, 0x157347, 1,
    1, 0x0f5132, 0, 0x000000, ""
);

button->setPressedArg("启动", 0xffffff, "", 18, 0);
button->setPressedStyle(
    6, 255, 0x12633d, 0x12633d, 0,
    1, 0x0f5132, 0, 0x000000, ""
);

图片路径仅在 FileUtil::fileExists 成功时设置。字体、图片和多语言标签应在页面显示前准备好。

setTransform 设置功能键按下时的尺寸变化:

cpp 复制代码
button->setTransform(20, 20);

正值表示按宽/高的该分母缩小,例如 20 表示减少 1/20;负值会放大;0 表示该方向不变。type>0 的元件按钮不会应用变换。

3. 状态图片与标题

cpp 复制代码
STTButton* sw = new STTButton(getRuntime(), parent, "btnMode", 2);
sw->setMainArg(20, 80, 100, 60, true);

sw->setImg("0", "res/mode_off.png", "关闭");
sw->setImg("1", "res/mode_on.png", "开启");
sw->enStateLabel();
sw->setState("0");

API:

方法 说明
setImg 登记状态到图片和标题
setTitle 登记或修改状态标题
getImg / getTitle 按状态或条件匹配读取
setState / getState 设置或读取当前状态文本
hasStateString 判断是否有匹配状态
getStateCount 返回状态 map 项数
switchNextState 按 map 的键排序切换下一状态
enStateLabel 懒创建内部 STTLabel
getStateLabel 获取内部标签,未启用时为 nullptr

重要行为:

  • 非功能键找不到匹配状态,或匹配项图片路径为空时,会隐藏控件。
  • setImg 的 path 为空时直接返回,不能用它添加纯标题状态;可改用 setTitle,但非功能键仍会因图片为空而隐藏。
  • 图片文件在 setState 时不存在,控件可能保留旧背景图片,需确保资源有效。
  • hasStateString 不只是查询,它先把 curState 改成传入值。不要用它做无副作用探测。
  • switchNextState 只按精确键查当前状态;条件表达式键可能无法按预期轮换。
  • 状态匹配支持 STTButtonInfo::FindState 的条件键,多个条件应避免重叠。

4. 变量绑定

type=2 或 type=3 时,变量变化才会用于 setState:

cpp 复制代码
Ivariable state = getRuntime()->getIVarMgr()->get("PumpState");
if (state != nullptr) {
    sw->bindData(state);
}

onDataChanged 先刷新当前标题,再要求变量能 safeStoi。一般字符串即使已有同名状态也不会切换,因此开关/指示灯状态最好使用数字文本。

功能键和普通按钮的绑定变量不会触发状态切换。

5. 事件打开/关闭页面

cpp 复制代码
button->bindOpenFormHandler(
    LV_EVENT_CLICKED,
    "FrmDetail",
    PageMode::NEWWIN,
    nullptr
);

button->bindCloseFormHandler(LV_EVENT_CLICKED, "Frm01");

嵌入模式可把 target 指向目标容器。处理器通过 map::insert 登记,同一 event 重复登记时后一次可能不会覆盖前一次。

页面 ID 必须存在;捕获的 IPageManager 与目标控件必须在按钮事件期间有效。

6. 变量操作 opDataObj

最近修改: 2026-10-21Powered by