下面将对所有控件的父类STTWidget
进行介绍。几乎所有的的控件都会继承STTWidget
中的方法。因此,其中的接口也是最基本的,最大众化的接口。以下内容位于库->widgets->STTWidget.h
/**
* @LEVEL0
* @brief 设置控件位置
* @param x X坐标
* @param y Y坐标
*/
STTWidget* setPos(int x, int y);
/**
* @LEVEL0
* @brief 设置控件位置
* @param x X坐标
*/
STTWidget* setX(int x);
/**
* @LEVEL0
* @brief 设置控件位置
* @param y Y坐标
*/
STTWidget* setY(int y);
/**
* @LEVEL1
* @brief 设置控件尺寸
* @param w 宽
* @param h 高
*/
STTWidget* setSize(int w, int h);
/**
* @LEVEL0
* @brief 设置控件尺寸
* @param w 宽
*/
STTWidget* setWidth(int w);
/**
* @LEVEL0
* @brief 设置控件尺寸
* @param h 高
*/
STTWidget* setHeight(int h);
/**
* @LEVEL1
* @brief 设置控件内容尺寸
* @param w 宽
*/
STTWidget* setContentWidth(int w);
/**
* @LEVEL1
* @brief 设置控件内容尺寸
* @param h 高
*/
STTWidget* setContentHeight(int h);
/**
* @LEVEL1
* @brief 设置控件布局方式
* @param layout 布局方式。目前有:弹性布局~STT_LAYOUT_FLEX 网格布局~STT_LAYOUT_GRID
*/
STTWidget* setLayout(unsigned layout);
/**
* @LEVEL1
* @brief 标记控件需要被布局更新
*/
STTWidget* markLayoutAsDirty();
/**
* @LEVEL1
* @brief 更新布局
*/
STTWidget* updateLayout();
/**
* @LEVEL1
* @brief 设置与父控件对齐
* @param align 见stt::constants::ALIGN
*/
STTWidget* setAlign(int align);
/**
* @LEVEL1
* @brief 设置与父控件对齐及偏移量
* @param align 见stt::constants::ALIGN
* @param x_ofs 水平偏移量
* @param y_ofs 垂直偏移量
*/
STTWidget* align(int align, int x_ofs, int y_ofs);
/**
* @LEVEL1
* @brief 与指定控件对齐及偏移
* @param base 指定要基于哪个控件对齐(这个控件位置不动)
* @param align 见stt::constants::ALIGN
* @param x_ofs 水平偏移量
* @param y_ofs 垂直偏移量
*/
STTWidget* alignTo(STTWidget* base, int align, int x_ofs, int y_ofs);
/**
* @LEVEL1
* @brief 位于父控件中心
*/
STTWidget* center();
/**
* @LEVEL1
* @brief 获取控件位置
* @param coords x1~左 x2~右 y1~上 y2~下
*/
void getCoords(LvArea* coords);
/**
* @LEVEL0
* @brief 获取控件左边的x坐标
*/
int getX();
/**
* @LEVEL0
* @brief 获取控件上边的y坐标
*/
int getY();
/**
* @LEVEL0
* @brief 获取控件宽度
*/
int getWidth();
/**
* @LEVEL0
* @brief 获取控件高度
*/
int getHeight();
/**
* @LEVEL1
* @brief 获取控件的内容宽度(控件宽 - 边框宽border - 左右边距pad)
*/
int getContentWidth();
/**
* @LEVEL1
* @brief 获取控件的内容高度(控件高 - 边框宽border - 上下边距pad)
*/
int getContentHeight();
/**
* @LEVEL1
* @brief 移动控件到指定位置。如超出父控件范围,将自动滚动
* @param x 目标x坐标
* @param y 目标y坐标
*/
STTWidget* moveTo(int x, int y);
/**
* @LEVEL1
* @brief 重绘整个控件
*/
STTWidget* invalidate();
/**
* @LEVEL1
* @brief 判断控件是否可见(部分可见,也是可见)
*/
bool isVisible();
/**
* @LEVEL1
* @brief 控件的每个方向都扩展可点击区域
* @param size 各方向扩展的像素数
*/
STTWidget* setExtClickArea(int size);
将 label(指针为wMLabel3
)放入屏幕中间
// 将控件设置于屏幕正中间
wMLabel3->center();
设置组件排列 设置 panel 为 flex 布局
wMPanel1->setLayout(STTLayout::FlexLayout());
// 4 表示lvgl LV_FLEX_FLOW_ROW_WRAP 具体的之后会说明
STTLayout::setFlexFlow(wMPanel1, 4);
各个控件有各个控件的实现方法,使用方法同上
/**
* @HideCA
*/
STTWidget(IRuntime* rt, STTWidget* par, const string& desc);
/**
* @HideCA
*/
virtual ~STTWidget();
/**
* @HideCA
* @brief 设置基本参数
* @param x x坐标
* @param y y坐标
* @param w 宽
* @param h 高
*/
void setMainArg(int x, int y, int w, int h);
/**
* @HideCA
* @brief 设置基本样式
* @param r 圆角半径。
* @param c1 主色(渐变起始色)
* @param c2 渐变终止色。
* @param dir 渐变方向。0~不渐变 1~上下 2~左右
* @param opa 不透明度。0~255
* @param w_border 边框线粗。
* @param c_border 边框线色
* @param w_shadow 阴影宽度。
* @param c_shadow 阴影颜色。
* @param ss 部件、状态选择器,见STTStyle::_selector
*/
void setMainStyle(int r=0, int c1=0xffffff, int c2=0xffffff, int dir=0, int opa=0, int w_border=0, int c_border=0x0, int w_shadow=0, int c_shadow=0x0, int ss = 0);
/**
* @HideCA
* @brief 设置文本样式
* @param c 文本颜色
* @param size 字体大小。
* @param fontname 字体名称。为NULL时,设为默认字体
* @param ss 部件、状态选择器,见STTStyle::_selector
*/
void setFontStyle(int c=0x0, int size=16, const char* fontname=NULL, int ss = 0);
/**
* @LEVEL0
* @brief 获取样式指针
*/
STTStyle* getStyle();
/**
* @LEVEL1
* @brief 设置主背景图片
* @param path 图片路径
* @param part 见stt::constant::Part
*/
STTWidget* setBgImg(const char* path, int part = stt::constant::Part::Main);
/**
* @LEVEL1
* @brief 刷新控件显示(绑定变量及动画,而不是刷新控件本身)
*/
virtual void refresh();
/**
* @LEVEL1
* @brief 刷新控件及其子控件显示(绑定变量及动画,而不是刷新控件本身)
*/
virtual void refreshAll();
/**
* @HideCA
* @brief 指定控件的事件处理函数
* @param code 见stt::constant::Event, 如ALL/PRESSED/PRESSING/PRESS_LOST/SHORT_CLICKED/LONG_PRESSED/LONG_PRESSED_REPEAT/CLICKED......
* @param object 控件
* @param handler 处理函数function (uint16_t code, LvEvent e)
*/
void onEventHandler(uint16_t code, SttObject* object, EHandler handler);
/**
* @HideCA
* @brief 绑定变量
* 文字控件 <-> 文字内容
* 文本框控件 <-> 文字内容
* LED控件 <-> 亮灭
* 进度条控件 <-> 进度值
* 下拉框控件 <-> 选中项索引
* 仪表盘 <-> 指针值
* 指针 <-> 指针值
* 刻度盘 <-> 刻度值
* @param data 变量 vm->get("变量名称")
*/
virtual void bindData(IVariable * data);
/**
* @HideCA
* @brief 绑定变量
* @param data 使用共享指针的变量
*/
virtual void bindData(shared_ptr<IVariable> data);
/**
* @HideCA
* @brief 绑定的变量变化时,响应函数
* @param org 控件
* @param data 变量 vm->get("变量名称")
*/
virtual void onDataChanged(SttObject * org, IVariable* data);
将 wMPanel1 进行刷新
wMPanel1->refreshAll();
/**
* @LEVEL1
* @brief 增加标志
* Set one or more flags
* @param f 见[常量FLAG],可或操作组合
* OR-ed values from `stt::constant::FLAG` to set.
*/
STTWidget* addFlag(uint32_t f);
/**
* @LEVEL1
* @brief 清除标志
* Clear one or more flags
* @param f 见[常量FLAG],可或操作组合
* OR-ed values from `stt::constant::FLAG` to set.
*/
STTWidget* clearFlag(uint32_t f);
/**
* @LEVEL0
* @brief 隐藏/显示控件
* @param en true~隐藏 false~显示
*/
virtual STTWidget* setHidden(bool en);
/**
* @LEVEL1
* @brief 禁止/使能控件
* @param en true~使能 false~禁止
*/
STTWidget* setEnable(bool en);
/**
* @LEVEL1
* @brief 控件是否可点击
* @param en true~可 false~不可
*/
STTWidget* setClickable(bool en);
/**
* @LEVEL1
* @brief 控件是否可滚动
* @param en true~是 false~否
*/
STTWidget* setScrollable(bool en);
/**
* @LEVEL1
* @brief 添加控件状态
* @param state 取值范围stt::constants::WidgetState。用或操作组合
*/
virtual STTWidget* addState(int state);
/**
* @LEVEL1
* @brief 取消控件状态
* @param state 取值范围stt::constants::WidgetState。用或操作组合
*/
virtual STTWidget* clearState(int state);
/**
* @LEVEL1
* @brief 获取控件状态。
* @return 取值范围stt::constants::WidgetState。用或操作组合
*/
int getState();
/**
* @LEVEL1
* @brief 是否添加了指定状态
* @param state 取值范围stt::constants::WidgetState。用或操作组合
*/
bool hasState(int state);
/**
* @LEVEL1
* @brief 传入用户数据
* @param user_data 指向用户数据的指针
*/
STTWidget* setUserData(void* user_data);
/**
* @LEVEL1
* @brief 是否添加了指定全部标志
* @param f 标志。见stt:constants::FLAG
*/
bool hasFlag(uint32_t f);
/**
* @LEVEL1
* @brief 获取控件所在组 | Get the group of the object
*/
void* getGroup();
/**
* @brief 获取控件用户数据 | Get the user_data field of the object
*/
void* getUserData();
/**
* @brief 判断控件是否还存在
*/
bool isValid();
设置控件隐藏 设置 wMLabel3 为不可见
wMLabel3->setHidden(true);
/**
* @LEVEL1
* @brief 删除控件及其子控件
*/
STTWidget* del();
/**
* @LEVEL1
* @brief 删除所有子控件
*/
STTWidget* clean();
/**
* @LEVEL1
* @brief 将控件的顺序移动到指定序号.序号从0开始
* @param index 序号
*/
STTWidget* moveToIndex(int32_t index);
/**
* @LEVEL1
* @brief 获取控件的屏幕对象
*/
void* getScreen();
/**
* @LEVEL1
* @brief 获取控件的显示对象(display)
*/
void* getDisp();
/**
* @LEVEL1
* @brief 获取父控件lvgl对象
*/
void* getParent();
/**
* @LEVEL1
* @brief 获取父控件
*/
STTWidget* getParentWidget();
/**
* @LEVEL1
* @brief 获取控件的第几个子控件
* @param id 索引值,从0开始
* @return
*/
STTWidget* getChildWidget(int id);
/**
* @LEVEL1
* @brief 获取子控件个数
*/
int getChildCnt();
/**
* @LEVEL1
* @brief 返回当前子控件的(child index)序号。从0开始
*/
int getIndex();
/**
* @LEVEL1
* @brief 向控件发送消息
* @param eventCode 消息代码, 见stt::constants::EVENT
* @param param 消息参数
*/
void sendEvent(uint16_t eventCode, void * param);
/**
* @HideCA
* @brief 获取lvgl根控件。控件的父为屏幕时,即为根控件。
*/
void* getRootObject();
/**
* @LEVEL1
* @brief 取根控件
*/
STTWidget* getRootWidget();
/**
* @LEVEL1
* @brief 获取控件类型
* 见[常量WidgetType]
*/
int widgetType();
/**
* @LEVEL2
* @brief 控件动画
* @param var 变量。
* @param options 操作参数。json格式, key:value
* 文字内容{t:0,p:[{k:1,v:大小}, {k:2,v:颜色}]}
* 前景色{t:1,p:[{k:1,v:0xff0000},{k:2,v:0x00ff00}]}
* 背景色{t:2,p:[{k:1,v:0xff0000},{k:2,v:0x00ff00}]}
* 边框色{t:3,p:[{k:1,v:0xff0000},{k:2,v:0x00ff00}]}
* 水平移动{t:4,p:{ml:1,vl:2,mu:100,vu:200}}
* 垂直移动{t:5,p:{ml:1,vl:2,mu:100,vu:200}}
* 尺寸变化{t:5,p:{ml:1,vl:2,mu:100,vu:200}}
*/
int opAnimObj(IVariable * var, const string& options);
/**
* @LEVEL2
* @brief 控件的可见控制
* @param options json格式 {"c":0}
* c:条件,0可见,1不可见
*/
int opVisibleObj(IVariable * var, const string& options);
/**
* @LEVEL2
* @brief 控件的使能/禁用控制
* @param options json格式 {"c":0}
* c:条件,0-使能,1-禁用
*/
int opEnableObj(IVariable * var, const string& options);
/**
* @LEVEL2
* @brief 控件闪烁
* @param var 变量。
* @param options 操作参数。json格式{"m":0, "p":[], "c":0,"s":1}
* "m":"闪烁方式:0~隐藏/显示方式 1~通过属性"
* "p":"[k:v,k:v...](m==1时,属性控制)"
* "c":"闪烁条件(0~不闪 非0~闪)"
* "s":速度 0:慢 1:适中 2:快
*/
int opFlickObj(IVariable * var, const string& options);
/**
* @LEVEL1
* @brief 启用/关闭权限确认
* @param b (无用,默认就是TRUE)
* @param auths 权限分组,多个组用","分隔
*/
void setAuth(bool b, const string& auths);
/**
* @LEVEL1
* @brief 授权
* @param b 是/否
*/
void authorize(bool b);
/**
* @LEVEL1
* @brief 是否授权
* @return 是/否
*/
bool isAuthorized();
/**
* @LEVEL1
* @brief 启用/关闭提示音
* @param b 启用/关闭
*/
void setBeep(bool b);
/**
* @LEVEL1
* @brief 启用/关闭确认对话框
* @param b 启用/关闭
* @param s 确认对话框信息
*/
void setConfirm(bool b, const string& s);
/**
* @LEVEL1
* @brief 启用/关闭操作日志
* @param b 启用/关闭
*/
void setOpLog(bool b);
/**
* @HideCA
* @brief 获取名称大小一致的字体指针。
* @param size 字体大小。
* @param fontname 字体名称。为""时或者没找到相应的字体,则取默认字体
*/
void* getFont(int size, const string& fontname="");
/**
* @LEVEL1
* @brief 旋转scr(弃用,控件操作方向不正确,请使用rotateDisp)
* @param angle 取0, 90, 180, 270
*/
static void rotateScreen(int angle,int pivotx, int pivoty);
/**
* @LEVEL1
* @brief 旋转disp
* @param angle 取0, 90, 180, 270
*/
static void rotateDisp(int angle);
/**
* @HideCA
* @brief 获取绝对坐标位置
* @param x [out] 返回x坐标
* @param y [out] 返回y坐标
* @param lvobj 指向 lvgl控件的指针(lv_obj_t*)
*/
void getAbsPosition(int& x, int& y, void* lvobj);
/**
* @LEVEL1
* @brief 获取控件说明
*/
string getDescription();
/**
* @LEVEL1
* @brief 获取控件截图,生成png图片
* @param path png文件路径
* @param isBGR 是否互换rb
*/
bool snapshotToPng(const string& path, bool isBGR = false);
/**
* @brief 保存编码器的焦点。当使用编码器时,主要是在有弹出消息框的地方,调用一下。
* @note 用于弹出窗口时,保存本控件为焦点控件,在关闭时,恢复本控件为焦点控件
*/
void setButtonerCode(uint8_t i);
uint8_t getButtonerCode();
可以参考控件截图
如果遇到了诸如void onEventHandler(uint16_t code, SttObject* object, EHandler handler);
,这里面的第三个参数为回调函数,下面将讲解回调函数的写法
一定要记得在头文件中对函数进行定义哦~
void onBtnHandler(uint16_t code, LvEvent e);
//
wMButton1->onEventHandler(Event::CLICKED, this, (EHandler)&Frm01::onBtnHandler);
void Frm01::onBtnHandler(uint16_t code, LvEvent e){
// 进行一些需要的操作。。。
}
/**
* @brief 增加角度型蒙板
* @param wid 控件
* @param x,y 角的顶点位置(相对坐标)
* @param angle1 角的起始角度(向右为0度,顺时针为正)
* @param angle2 角的终止角度(向右为0度,顺时针为正)
*/
static void addAngle(STTWidget* wid, int x, int y, int angle1, int angle2);
/**
* @brief 初始化渐变型蒙版(从上到下)
* @param wid 控件
* @param x,y,w,h蒙版区域(相对坐标)
* @param opa1,y1 上端开始位置的不透明度(相对坐标)
* @param opa2,y2 下端开始位置的不透明度(相对坐标)
*/
static void addFade(STTWidget* wid,int x, int y, int w, int h, int opa1, int y1, int opa2, int y2);
/**
* @brief 用点角法初始化线蒙版(取线的一侧)
* @param wid 控件
* @param x,y 线经过的点(相对坐标)
* @param angle 线的角度0~360(向右为0度,顺时针为正)
* @param side 0~左 1~右 2~上 3~下
* @note 垂直(水平)线不存在上下(左右),设为上下(左右)时蒙版失效
*/
static void addLine1(STTWidget* wid,int x, int y,int angle,int side);
/**
* @brief 两点法线蒙版(取线的一侧)
* @param wid 控件
* @param x1,y1,x2,y2 线经过的两点(相对坐标)
* @param side 0~左 1~右 2~上 3~下
* @note 垂直(水平)线不存在上下(左右),设为上下(左右)时蒙版失效
*/
static void addLine2(STTWidget* wid,int x1, int y1,int x2, int y2,int side);
/**
* @brief 点阵蒙版
* @param wid 控件
* @param x,y,w,h 蒙版区域(相对坐标)
* @param opamap 各点的透明度
*/
static void addMap(STTWidget* wid, int x, int y, int w, int h, uint8_t* opamap);
/**
* @brief 初始化多边型蒙版
* @param wid 控件
* @param points 多边型顶点(相对坐标)
*/
static void addPolygon(STTWidget* wid,vector<LvPoint>& points);
/**
* @brief 初始化圆角区域蒙版
* @param wid 控件
* @param x,y,w,h 区域(相对坐标)
* @param radius 圆角半径
* @param inv 是则画内侧,否则画外侧
*/
static void addRadius(STTWidget* wid, int x, int y, int w, int h, int radius, bool inv);
/**
* @brief 应用蒙板,一般在LV_EVENT_DRAW_MAIN_BEGIN事件中调用
*/
static void apply();
/**
* @brief 清除蒙板,一般在LV_EVENT_DRAW_MAIN_END事件中调用
*/
static void clear();
专业讲解正在奔来~~
/**@HideCA*/
void* mWidget;
/**@HideCA*/
void* object;
/**@HideCA 宽*/
int16_t mSettedwidth;
/**@HideCA 高*/
int16_t mSettedheight;
/**@HideCA X*/
int16_t mSettedX;
/**@HideCA Y*/
int16_t mSettedY;