资讯动态

LVGL 开发笔记

发布时间:2026/8/22 11:30:18 来源:尧图企业网站定制
LVGL采用的是一种面对对象编程思维在 C语言中并没有“类”的概念而LVGL通过结构体的形式实现了“类”的功能并 非真的“类”具体的实现逻辑如下图所示lv_obj_t 定义控件界面、按钮、文本变量 必须是指针类型LVGL 的所有样式设置、坐标对齐、事件绑定函数参数类型统一都是lv_obj_t *同时lv_obj_t 结构体的大小并不是完全固定死的它会根据你在 lv_conf.h 里的配置比如是否开启扩展属性、是否开启用户数据 LV_USE_USER_DATA、开启了哪些模块而在编译期改变结构体的大小因此在 LVGL 中定义控件变量时必须且只能是指针类型lv_obj_t *lv_obj_create() 创建容器、界面常用它创建界面、自定义控件的基础创建新界面首先要获取屏幕正在显示的活动屏幕对象lv_scr_act() 是 lv_screen_active()或 lv_scr_act 宏的缩写它是整个 UI 树的根节点Root Node。在 LVGL 中所有控件都遵循父子树形结构Parent-Child Tree。创建任何控件或容器比如 lv_obj_create时必须指定一个“父对象”parentlv_obj_t *scr lv_scr_act();lv_obj_t *page lv_obj_create(scr);lv_obj_create这些创建函数返回一个lv_obj_t类型的指针指向你创建的控件lv_obj_t结构体lv_obj_t结构体typedef struct _lv_obj_t {const lv_obj_class_t * class_p;struct _lv_obj_t * parent;_lv_obj_spec_attr_t * spec_attr;_lv_obj_style_t * styles;#if LV_USE_USER_DATAvoid * user_data;#endiflv_area_t coords;lv_obj_flag_t flags;lv_state_t state;uint16_t layout_inv : 1;uint16_t scr_layout_inv : 1;uint16_t skip_trans : 1;uint16_t style_cnt : 6;uint16_t h_layout : 1;uint16_t w_layout : 1;} lv_obj_t;里面包含控件类型父对象样式列表先获取当前正在显示的屏幕对象作为父节点 page为子对象作为创建的界面然后定义大小、样式同样界面里面的按钮文本这些控件也是page的子对象lv_btn_create() 创建按钮lv_label_create() 创建文本lv_obj_set_size(btn_back, 70, 46); //控件大小lv_obj_align(btn_back, LV_ALIGN_BOTTOM_RIGHT, -82, -44); //控件对齐方式也就是控件位置 param控件对象相对于父容器对齐方式x轴y轴左负右正lv_obj_add_event_cb( //按钮绑定事件回调函数也就是点击按钮会触发什么事件、触摸动作btn_back,page_navigate_cb, //事件回调函数LV_EVENT_CLICKED, //触摸事件(void *)(intptr_t)PAGE_HOME); //传给回调函数的变量用户自定义数据lv_timer_create()LVGL的软定时器lv_timer_t * lv_timer_create(lv_timer_cb_t timer_xcb, uint32_t period, void * user_data); 可以周期行的执行回调函数eg lv_timer_create(machine_running_ui_timer_cb, 100, NULL); 100ms 执行一次machine_running_ui_timer_cb函数字体eg:lv_obj_t *lbl_prefix lv_label_create(loop_cont); //文本标签lv_label_set_text(lbl_prefix, 剩余圈数); //显示文本内容lv_obj_set_style_text_color(lbl_prefix, lv_color_hex(0x354554), 0); //字体颜色 第三个参数selector 选择器常用0 也可以根据按钮状态动态的显示颜色lv_obj_set_style_text_font(lbl_prefix, lv_my_Font_20, 0); //使用的是哪一个字体LVGL没有中文字库显示的汉字需要到LVGL官方转换器里面把汉字转换成C语言文件得到这个C语言文件之后添加到LVGL源码font目录下并添加到项目工程然后在头文件或者.c文件顶部添加中文字体宏定义 LV_FONT_DECLARE(lv_my_Font_20);

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价