一、lv_obj_t是 LVGL 最核心、最重要的结构体没有之一1. 它是什么lv_obj_t 所有 UI 组件的基类父模板你学到的所有控件标签、按钮、开关、进度条、空白容器、lv_win 窗口、列表、图片等等…… 底层全部继承 lv_obj_t。每一个界面上显示的东西本质都是一个 lv_obj_t 对象。2. 为什么它至关重要4 个核心作用① 统一所有控件的通用属性parent父子层级构成界面树窗口里放开关、标签全靠这个指针关联coords坐标、宽高决定控件画在屏幕哪个位置styles样式颜色、圆角、边框state状态按下、禁用、聚焦class_p标记它到底是按钮 / 开关 / 窗口哪一类控件不管什么控件都必须保存这套基础信息全部封装进 lv_obj_t。② 实现通用函数一套通吃LVGL 大量通用接口参数统一是 lv_obj_t*lv_obj_set_size(lv_obj_t *obj, w, h); // 设置大小按钮/窗口/开关都能用 lv_obj_align(lv_obj_t *obj, ...); // 设置对齐 lv_obj_set_style_bg_color(obj, ...); // 设置背景色 lv_obj_del(lv_obj_t *obj); // 删除任意控件如果没有lv_obj_t每一种控件都要单独写一套设置大小、移动、删除的函数代码会爆炸。③ 支撑界面层级渲染逻辑LVGL 渲染流程从根屏幕lv_scr_act()遍历所有lv_obj_t对象按父子顺序一层层绘制。没有lv_obj_t的父子指针系统无法知道哪个控件在哪个容器内部、谁在前谁在后。④ 事件系统全部依托它点击、滑动、切换等事件全部基于lv_obj_t对象传递回调函数拿到的触发对象也是lv_obj_t*。3. 两种创建方式本质都是 lv_obj_t空白容器lv_obj_t* menu3 lv_obj_create(parent); // 直接创建基础lv_obj_t空白对象专用控件开关、窗口、按钮lv_obj_t *sw lv_switch_create(parent); // 内部先创建lv_obj_t再追加开关专属扩展属性返回指针依然是lv_obj_t*所有xxx_create()返回值全是lv_obj_t*统一类型。4. 极简总结LVGL 里所有看得见的东西都是 lv_obj_t它是整个图形库的底层骨架层级、渲染、样式、事件全部依赖它几乎 90% 的 LVGL 函数都需要传入lv_obj_t*作为操作对象是必须吃透的核心结构。二、和 lv_obj_t 配套的顶层核心结构体1.lv_obj_class_t作用区分控件类型按钮 / 开关 / 标签 / 窗口存在 lv_obj_t 的 class_p 指针里用途内部保存该控件专属创建、绘图、事件回调函数判断对象是什么组件。2. lv_area_t成员x1,y1,x2,y2记录控件坐标区域lv_obj_t-coords 就是它常用函数lv_area_set_pos、lv_area_is_inside判断点击是否落在控件内。3. lv_obj_style_t控件样式结构体存颜色、圆角、字体、边框、透明度所有组件共用lv_obj_t 里挂载lv_obj_set_style_xxx 系列函数操作它。4. lv_event_t超级高频所有组件点击、滑动、切换事件的载体几乎所有交互控件按钮、开关、复选框、键盘都要用关键函数lv_obj_add_event_cb(obj, 回调函数, LV_EVENT_CLICKED, NULL)lv_event_get_target(e) 获取触发的控件返回lv_obj_t*5. lv_state_t控件状态枚举按下、聚焦、禁用、选中开关、复选框、按钮、进度条依赖样式会随状态切换。6. 位域标记 lv_obj_flag_t控制控件隐藏、可点击、可滚动、布局刷新所有组件通用。三、全局通用关键变量 / 句柄lv_scr_act()获取当前激活屏幕所有组件创建时最常用的父对象返回lv_obj_t*LV_PALETTE_xxx 全局颜色常量LV_PALETTE_BLUE/LV_PALETTE_REDLV_ALIGN_xxx 对齐宏LV_ALIGN_CENTER、LV_ALIGN_TOP_LEFTLV_SYMBOL_xxx 内置图标符号关闭、勾选、箭头窗口 / 按钮 / 消息框用。极简总结万物根基lv_obj_t 所有组件父结构体必掌握交互核心lv_event_t 做点击、切换逻辑必备每个控件都有自己专属 xxx_t 结构体只是创建函数返回统一转成lv_obj_t*屏幕、对齐、颜色、图标是全局宏变量所有组件通用定时器lv_timer_t是配套工具用来定时刷新界面数据。四、LVGL 函数前缀分类对照表一、通用控件接口lv_obj_*所有控件通用label/btn/list/switch/page 都能调用函数示例功能lv_obj_set_size()设置控件宽高lv_obj_set_pos()设置坐标lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN)隐藏控件lv_obj_clear_flag(obj, LV_OBJ_FLAG_HIDDEN)显示控件lv_obj_set_style_text_font()设置文字字体lv_obj_add_style()挂载自定义样式lv_obj_del()删除控件lv_obj_center()居中lv_obj_align()设置对齐方式二、控件专属接口lv_控件类型_*仅对应控件可用前缀对应控件示例函数功能lv_label_文本标签lv_label_set_text()修改标签文字lv_btn_普通按钮lv_btn_set_checkable()设置按钮可勾选lv_list_列表框lv_list_add_btn() / lv_list_get_btn_text()添加按钮、读取按钮文字lv_switch_开关控件lv_switch_set_anim_time()设置开关动画时长lv_textarea_文本输入框lv_textarea_set_text()输入框赋值lv_dropdown_下拉框lv_dropdown_set_options()设置下拉选项lv_slider_滑动条lv_slider_set_value()设置滑块数值lv_roller_滚轮选择器lv_roller_set_options()设置滚轮选项三、非控件类接口操作样式 / 内存 / 定时器 / 文件 / 事件/工具 / 系统和控件无关前缀操作对象示例函数用途lv_style_样式结构体 lv_style_tlv_style_set_text_font()给样式设置字体、颜色、圆角lv_mem_LVGL 内存堆lv_mem_alloc()手动内存分配底层lv_timer_LVGL 软件定时器lv_timer_create()创建定时任务lv_event_事件工具lv_event_get_target()获取触发事件的控件lv_fs_文件系统lv_fs_open() / lv_fs_read()读写 SD 卡 / 本地文件lv_font_字体资源lv_font_load()加载外部字体lv_disp_显示屏幕lv_disp_set_bg_color()设置屏幕背景色lv_indev_输入设备触摸lv_indev_read()读取触摸坐标快速判断口诀lv_obj_xxx → 随便哪个控件都能用lv_label/lv_list/lv_btn_xxx → 只能对应同种控件lv_style/lv_timer/lv_fs_xxx → 和控件无关操作配套功能句柄lv_obj_t* 指针是什么
【嵌入式LVGL】04.LVGL常用结构体、函数、变量+LVGL接口函数区分
一、lv_obj_t是 LVGL 最核心、最重要的结构体没有之一1. 它是什么lv_obj_t 所有 UI 组件的基类父模板你学到的所有控件标签、按钮、开关、进度条、空白容器、lv_win 窗口、列表、图片等等…… 底层全部继承 lv_obj_t。每一个界面上显示的东西本质都是一个 lv_obj_t 对象。2. 为什么它至关重要4 个核心作用① 统一所有控件的通用属性parent父子层级构成界面树窗口里放开关、标签全靠这个指针关联coords坐标、宽高决定控件画在屏幕哪个位置styles样式颜色、圆角、边框state状态按下、禁用、聚焦class_p标记它到底是按钮 / 开关 / 窗口哪一类控件不管什么控件都必须保存这套基础信息全部封装进 lv_obj_t。② 实现通用函数一套通吃LVGL 大量通用接口参数统一是 lv_obj_t*lv_obj_set_size(lv_obj_t *obj, w, h); // 设置大小按钮/窗口/开关都能用 lv_obj_align(lv_obj_t *obj, ...); // 设置对齐 lv_obj_set_style_bg_color(obj, ...); // 设置背景色 lv_obj_del(lv_obj_t *obj); // 删除任意控件如果没有lv_obj_t每一种控件都要单独写一套设置大小、移动、删除的函数代码会爆炸。③ 支撑界面层级渲染逻辑LVGL 渲染流程从根屏幕lv_scr_act()遍历所有lv_obj_t对象按父子顺序一层层绘制。没有lv_obj_t的父子指针系统无法知道哪个控件在哪个容器内部、谁在前谁在后。④ 事件系统全部依托它点击、滑动、切换等事件全部基于lv_obj_t对象传递回调函数拿到的触发对象也是lv_obj_t*。3. 两种创建方式本质都是 lv_obj_t空白容器lv_obj_t* menu3 lv_obj_create(parent); // 直接创建基础lv_obj_t空白对象专用控件开关、窗口、按钮lv_obj_t *sw lv_switch_create(parent); // 内部先创建lv_obj_t再追加开关专属扩展属性返回指针依然是lv_obj_t*所有xxx_create()返回值全是lv_obj_t*统一类型。4. 极简总结LVGL 里所有看得见的东西都是 lv_obj_t它是整个图形库的底层骨架层级、渲染、样式、事件全部依赖它几乎 90% 的 LVGL 函数都需要传入lv_obj_t*作为操作对象是必须吃透的核心结构。二、和 lv_obj_t 配套的顶层核心结构体1.lv_obj_class_t作用区分控件类型按钮 / 开关 / 标签 / 窗口存在 lv_obj_t 的 class_p 指针里用途内部保存该控件专属创建、绘图、事件回调函数判断对象是什么组件。2. lv_area_t成员x1,y1,x2,y2记录控件坐标区域lv_obj_t-coords 就是它常用函数lv_area_set_pos、lv_area_is_inside判断点击是否落在控件内。3. lv_obj_style_t控件样式结构体存颜色、圆角、字体、边框、透明度所有组件共用lv_obj_t 里挂载lv_obj_set_style_xxx 系列函数操作它。4. lv_event_t超级高频所有组件点击、滑动、切换事件的载体几乎所有交互控件按钮、开关、复选框、键盘都要用关键函数lv_obj_add_event_cb(obj, 回调函数, LV_EVENT_CLICKED, NULL)lv_event_get_target(e) 获取触发的控件返回lv_obj_t*5. lv_state_t控件状态枚举按下、聚焦、禁用、选中开关、复选框、按钮、进度条依赖样式会随状态切换。6. 位域标记 lv_obj_flag_t控制控件隐藏、可点击、可滚动、布局刷新所有组件通用。三、全局通用关键变量 / 句柄lv_scr_act()获取当前激活屏幕所有组件创建时最常用的父对象返回lv_obj_t*LV_PALETTE_xxx 全局颜色常量LV_PALETTE_BLUE/LV_PALETTE_REDLV_ALIGN_xxx 对齐宏LV_ALIGN_CENTER、LV_ALIGN_TOP_LEFTLV_SYMBOL_xxx 内置图标符号关闭、勾选、箭头窗口 / 按钮 / 消息框用。极简总结万物根基lv_obj_t 所有组件父结构体必掌握交互核心lv_event_t 做点击、切换逻辑必备每个控件都有自己专属 xxx_t 结构体只是创建函数返回统一转成lv_obj_t*屏幕、对齐、颜色、图标是全局宏变量所有组件通用定时器lv_timer_t是配套工具用来定时刷新界面数据。四、LVGL 函数前缀分类对照表一、通用控件接口lv_obj_*所有控件通用label/btn/list/switch/page 都能调用函数示例功能lv_obj_set_size()设置控件宽高lv_obj_set_pos()设置坐标lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN)隐藏控件lv_obj_clear_flag(obj, LV_OBJ_FLAG_HIDDEN)显示控件lv_obj_set_style_text_font()设置文字字体lv_obj_add_style()挂载自定义样式lv_obj_del()删除控件lv_obj_center()居中lv_obj_align()设置对齐方式二、控件专属接口lv_控件类型_*仅对应控件可用前缀对应控件示例函数功能lv_label_文本标签lv_label_set_text()修改标签文字lv_btn_普通按钮lv_btn_set_checkable()设置按钮可勾选lv_list_列表框lv_list_add_btn() / lv_list_get_btn_text()添加按钮、读取按钮文字lv_switch_开关控件lv_switch_set_anim_time()设置开关动画时长lv_textarea_文本输入框lv_textarea_set_text()输入框赋值lv_dropdown_下拉框lv_dropdown_set_options()设置下拉选项lv_slider_滑动条lv_slider_set_value()设置滑块数值lv_roller_滚轮选择器lv_roller_set_options()设置滚轮选项三、非控件类接口操作样式 / 内存 / 定时器 / 文件 / 事件/工具 / 系统和控件无关前缀操作对象示例函数用途lv_style_样式结构体 lv_style_tlv_style_set_text_font()给样式设置字体、颜色、圆角lv_mem_LVGL 内存堆lv_mem_alloc()手动内存分配底层lv_timer_LVGL 软件定时器lv_timer_create()创建定时任务lv_event_事件工具lv_event_get_target()获取触发事件的控件lv_fs_文件系统lv_fs_open() / lv_fs_read()读写 SD 卡 / 本地文件lv_font_字体资源lv_font_load()加载外部字体lv_disp_显示屏幕lv_disp_set_bg_color()设置屏幕背景色lv_indev_输入设备触摸lv_indev_read()读取触摸坐标快速判断口诀lv_obj_xxx → 随便哪个控件都能用lv_label/lv_list/lv_btn_xxx → 只能对应同种控件lv_style/lv_timer/lv_fs_xxx → 和控件无关操作配套功能句柄lv_obj_t* 指针是什么