单片机基础知识--LVGL学习-lv_obj_add_flag()

lv_obj_add_flag()

函数原型

c 复制代码
void lv_obj_add_flag(lv_obj_t * obj, lv_obj_flag_t flag);

头文件lvgl.h

  • obj:目标对象指针
  • flag:要设置的对象标志位,可以多个标志位按位或 | 同时传入

所属:LVGL 对象系统,用来给控件添加状态/行为标记,不修改样式,修改对象行为属性。


相关配套函数

c 复制代码
// 添加标志
void lv_obj_add_flag(lv_obj_t * obj, lv_obj_flag_t flag);

// 清除标志
void lv_obj_clear_flag(lv_obj_t * obj, lv_obj_flag_t flag);

// 判断是否拥有该标志
bool lv_obj_has_flag(const lv_obj_t * obj, lv_obj_flag_t flag);

// 切换标志(有就清除,没有就添加)
void lv_obj_toggle_flag(lv_obj_t * obj, lv_obj_flag_t flag);

常用 lv_obj_flag_t 标志(LVGL 9.x)

标志 作用
LV_OBJ_FLAG_HIDDEN 对象隐藏,不再渲染,也不接收输入
LV_OBJ_FLAG_CLICKABLE 对象可点击接收输入事件
LV_OBJ_FLAG_CLICK_FOCUSABLE 点击时获取焦点
LV_OBJ_FLAG_SCROLLABLE 允许对象滚动(容器常用)
LV_OBJ_FLAG_SCROLL_ELASTIC 滚动到边界有弹性回弹效果
LV_OBJ_FLAG_SCROLL_MOMENTUM 滑动松手后惯性滚动
LV_OBJ_FLAG_SCROLL_CHAIN 把滚动传递给父对象
LV_OBJ_FLAG_FLOATING 对象不受父对象裁剪限制,可以绘制到父外面
LV_OBJ_FLAG_OVERFLOW_VISIBLE 子对象超出父边界也绘制出来
LV_OBJ_FLAG_EVENT_BUBBLE 事件向上冒泡到父对象

⚠️区分:

  • lv_obj_flag_t对象行为标志lv_obj_add_flag()
  • lv_state_t对象状态 (按下、聚焦、禁用),lv_obj_add_state()

使用示例

1. 隐藏对象

c 复制代码
lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);   //隐藏
lv_obj_clear_flag(obj, LV_OBJ_FLAG_HIDDEN); //显示

2. 开启容器滚动,弹性+惯性

c 复制代码
lv_obj_add_flag(cont, LV_OBJ_FLAG_SCROLLABLE | 
                       LV_OBJ_FLAG_SCROLL_MOMENTUM | 
                       LV_OBJ_FLAG_SCROLL_ELASTIC);

3. 判断标志

c 复制代码
if(lv_obj_has_flag(obj, LV_OBJ_FLAG_HIDDEN))
{
    //对象处于隐藏
}

关键注意点

  1. 多标志用按位或 |,不是逗号分隔。
  2. LV_OBJ_FLAG_HIDDEN:隐藏后对象完全不参与渲染和输入,不等于设置样式透明度 lv_style_set_opa()
    • HIDDEN:完全消失,不占用渲染
    • opa=0:看不见,但还占位置,还能接收点击事件
  3. LV_OBJ_FLAG_FLOATING / OVERFLOW_VISIBLE:父对象默认会裁剪子控件,想要子控件画到父控件外面,需要开启这两个标志。
  4. flag是对象实例属性,不会继承给子对象,每个对象独立。

容易踩坑

  • 容器滚动不生效:忘记设置 LV_OBJ_FLAG_SCROLLABLE;或者父对象裁剪,子大小没有超过容器大小。
  • 设置透明度看不见控件,但还能点击:只是样式opa为0,没有设置LV_OBJ_FLAG_HIDDEN
相关推荐
choumin1 小时前
C程序能调用extern “C“声明的带默认参数的C++函数吗?
c语言·c++·extern c·默认参数
ThsPool1 小时前
【ENVI二次开发学习整理 02】IDL语言基础与程序设计
学习·中间件
Funing71 小时前
系列一:STM32 外设初始化
stm32·单片机·嵌入式硬件
LONGZETECH2 小时前
传统实训 vs 仿真实训:从技术架构拆解新能源汽车教学的范式之变
c语言·3d·unity·架构·汽车
白白白小纯2 小时前
每日算法day3—回文链表,链表分割
c语言·数据结构·算法·leetcode
一只小菜鸡..2 小时前
南京大学 操作系统 (JYY) 学习笔记:文件系统实现——从 FAT、ext2 到现代 B-Tree 黑科技
笔记·科技·学习
深爱水瓶 血影S狂风2 小时前
Linux.NET学习手记(2)
linux·学习·.net
明明真系叻2 小时前
RAG学习(1)
学习·rag
春水碧于天,画船听雨眠2 小时前
LangChain学习笔记(一)
笔记·学习·langchain