学习 lvgl 的理解总结,如有错误,麻烦各位大佬帮忙指正
目录
什么是 lvgl ?
lvgl 其实就是各种图形部件 Widget(如滑块、滚轮、按钮等)的集合库(GUI 库)。每个部件都是通过 API 函数创建(函数格式一般都是 lv_xxx_create( ),xxx 是部件名)。lv_obj_t 是部件类型,是结构体进行 typedef 后的重命名(可用来创建结构体或结构体指针,这个结构体内部具备所有部件的属性),因此,所有部件都具备一些共同属性,例如大小、颜色、位置、样式这些,只是不同部件其具体的参数可能不同
lvgl 采用了一定的面向对象编程的设计思想,我们操控的都是一个个别人事先为我们准备好编写好的部件(对象),如果想要使用部件,就得先创建部件需要调用部件创建函数(实例化),不像 C 是面向过程的编程,不管做什么都是从零开始(想使用部件也得从零开始编写出一个部件)。所有的对象都是在 lv_obj_t 这个结构体的基础上进行演变的,诞生各种不一样的部件
关于 lvgl 的屏幕
屏幕在 lvgl 中,是没有父类的基础对象,是 lvgl 初始化时就默认创建的部件,其他所有部件都是屏幕的衍生物(其他部件都继承于屏幕,屏幕是所有部件的父对象,准确说,屏幕是其他所有部件的最初父对象),如下:

Q:为什么说其他部件均继承于屏幕,或其他部件是屏幕的衍生物?
A:创建部件时,需要调用部件创建函数,部件创建函数有一个参数是 parent,即父对象,就是指定一个对象作为父对象,在父对象上创建生成一个部件,父对象是新部件的容器、是新部件的活动范围,没有父对象的话,新部件就无法出现(当然基础对象屏幕除外),如下:
lv_obj_t * obj1 = lv_obj_create(lv_scr_act()); //创建部件 obj1,父对象是屏幕
lv_obj_set_size(obj1, LV_PCT(40), LV_PCT(40)); //设置 obj1 的宽度、高度
lv_obj_align(obj1, LV_ALIGN_CENTER, 0, 0); //以父对象作为参照物进行居中
lv_obj_t * obj2 = lv_obj_create(obj1); //创建部件 obj2,父对象是 obj1
lv_obj_set_size(obj2, LV_PCT(20), LV_PCT(20)); //设置 obj2 的宽度、高度
lv_obj_align(obj2, LV_ALIGN_CENTER, 0, 0); //以父对象作为参照物进行居中

可以看到,obj1 是在屏幕上创建的,位于屏幕内,也只能在屏幕内活动。obj2 是在 obj1 上创建的,位于 obj1 内,也只能在 obj1 内活动。
除屏幕外的所有部件,第一个创建的部件永远是以屏幕作为父对象才能被创建的。
部件的基本属性(所有部件都具备的属性)
一、大小
设置部件的宽度、高度的函数
| lv_obj_set_width (obj, new_width) |
设置 obj 部件的宽度 |
| lv_obj_set_height (obj, new_height) |
设置 obj 部件的高度 |
| lv_obj_set_size (obj, new_ width, new_ height) |
设置 obj 部件的宽度和高度 |
获取部件的宽度、高度的函数
| lv_obj_get_width (obj) |
获取 obj 部件的宽度 |

最低0.47元/天 解锁文章
2617

被折叠的 条评论
为什么被折叠?



