二.LVGL学习——(lv_obj基础对象)

2023-05-16

二.LVGL学习——(lv_obj基础对象)

  • 1.介绍
  • 2.对象的工作机制
  • 3.对象的创建与删除
  • 4.Screen 屏幕对象
  • 5.实例代码(1)
  • 6.实例代码(2)

1.介绍

LVGL是以对象为概念的,而其最核心的基础对象是lv_obj控件,其他所有专用控件(如按钮,标签,列表)都是在lv_obj对象的基础上衍生出来的,所有的控件对象都具备一些共同属性,例如:
1. 位置
2. 大小
3. 父类
4. 是否可拖拽
5. 是否可点击

共同属性都是通过一套共同的API接口来设置的。
除了共同属性外,不同的控件都会有自己的专有属性。

2.对象的工作机制

父对象可以被作是其子对象的容器,每个对象只有一个父对象(screen 对象没有父对象),父对象可以有无限数量的子对象,同时父对象的类型是没有限制,

父对象和子对象之间具有如下 2 点特性:
1.一起移动:
  如果父对象的位置更改,则子对象将随父对象一起移动,因此子对象的坐标位置是
以父对象的左上角而言的,而不是以屏幕的左上角

2.子对象只能在父对象的区域内显示:
如果子对象的一部分在父对象的外面,那么子对象的这一部分将不会被显示出来

3.对象的创建与删除

在littleVGL中,对象可以动态的被创建和删除,每一种对象都有其专属的create创建函数,所有对象的删除函数都是相同的

1.创建对象:
创建函数看起来如下面这样:

  1. lv_obj_t * lv_ < type>_create(lv_obj_t * parent, lv_obj_t * copy);
  2. parent: 父对象,如果想创建一个 screen 对象,那么请传 NULL 值
  3. copy: 此参数可选,表示创建新对象时,把 copy 对象上的属性值复制过来

2.清除对象:
lv_obj_del:删除对象操作是立即执行的
lv_obj_del_async(obj):异步删除,它会在下一个 lv_task_handler 调用时被执行
lv_obj_clean(obj):清除某个 obj 对象下的所有子对象

4.Screen 屏幕对象

屏幕对象是一个特殊的对象,因为他自己没有父对象,默认情况下,littleVGL 会为显示器创建一个 lv_obj 类型的基础对象来作为它的屏幕,即最顶层的父类,可以通过 lv_scr_act()接口来获取当前活跃的屏幕对象,通过 lv_scr_load()接口来设置一个新的活跃屏幕对象

1.创建屏幕对象:
lv_obj_t * screen1 = lv_obj_create(NULL, NULL);

5.实例代码(1)

此代码声明3个对象(屏幕、按钮、文本),将对象居中后,按下按键后松开显示按下的次数

//声明按钮子对象为全局
lv_obj_t* btn1;
//声明屏幕对象为全局
lv_obj_t* obj1;
//声明文本对象为全局
lv_obj_t* label;

void btn1_event_cb(lv_event_t* event1)
{
    //声明变量
    static uint32_t cnt = 1;
    //获取事件对象
    btn1 = lv_event_get_target(event1);
    //获取第一个子对象
    label = lv_obj_get_child(btn1, 0);
    //设置显示内容
    lv_label_set_text_fmt(label, "%d", cnt);
    //变量自加
    cnt++;
    
 	//删除文本对象
	//lv_obj_del(label);
}

void lv_demo_my_mark(void)
{
/****************************************屏幕对象*******************************************/
    //获取默认屏幕
    lv_obj_t* src = lv_scr_act();
    //创建屏幕对象
    obj1 = lv_obj_create(src,NULL);
    //屏幕对象居中显示
    lv_obj_center(obj1);
/****************************************按钮对象*******************************************/
   //创建按钮并且,选取src屏幕作为父对象,不需要复制对象
    btn1 = lv_btn_create(src,NULL);
    //设置对象大小
    lv_obj_set_size(btn1, 100, 50);
    //按钮对象居中显示
    lv_obj_center(btn1);
/****************************************文本对象*******************************************/
    //Button对象上创建Label对象
    label = lv_label_create(btn1);
    //设置显示内容
    lv_label_set_text(label, "Click me!");
    //文本对象居中显示
    lv_obj_center(label);  

    //设置回调函数
    lv_obj_add_event_cb(btn1, btn1_event_cb, LV_EVENT_CLICKED, NULL);

}

6.实例代码(2)

此代码功能,更改父级,删除子对象,对象前置,拷贝对象样式

//声明屏幕对象为全局
lv_obj_t* src;
//声明按钮子对象为全局
lv_obj_t* btn1;
//声明矩形对象为全局
lv_obj_t* obj1;
//声明矩形子对象为全局
lv_obj_t* obj2;
//声明矩形子对象为全局
lv_obj_t* obj3;
//声明文本对象为全局
lv_obj_t* label;
//声明矩形子对象的样式为全局
lv_style_t style1;
//声明矩形子对象的样式为全局
lv_style_t style2;

void btn1_event_cb(lv_event_t* event1)
{
    //删除obj1下所有的子对象
    //lv_obj_clean(obj1);
    //更换父对象
    //lv_obj_set_parent(obj3, src);
    //将对象前置
    lv_obj_move_foreground(obj2);
    
}


void lv_demo_my_mark(void)
{
/****************************************屏幕对象*******************************************/
    //获取默认屏幕
    src = lv_scr_act();
    //选取默认屏幕作为父级,在此基础上画一个矩形对象
    obj1 = lv_obj_create(src, NULL);
    //设置矩形对象大小
    lv_obj_set_size(obj1, 400, 400);
    //屏幕对象居中显示
    lv_obj_center(obj1);

/****************************************按钮对象*******************************************/
   //创建按钮并且,选取src屏幕作为父对象,不需要复制对象
    btn1 = lv_btn_create(src,NULL);
    //设置对象大小
    lv_obj_set_size(btn1, 100, 50);
    //设置按钮对象的坐标
    lv_obj_set_pos(btn1, 10, 10);
/****************************************矩形对象*******************************************/
    //创建矩形子对象
    obj2 = lv_obj_create(obj1, NULL);
    //设置矩形子对象的坐标
    lv_obj_set_pos(obj2, 0, 0);
    //拷贝obj2的图形样式
    obj3 = lv_obj_create(obj1, obj2);
    //设置矩形子对象的坐标
    lv_obj_set_pos(obj2, 100, 0);
    //设置对齐方式
    //lv_obj_align_to(obj3,obj2,LV_ALIGN_OUT_BOTTOM_LEFT,0,0);

    //设置回调函数
    lv_obj_add_event_cb(btn1, btn1_event_cb, LV_EVENT_CLICKED, NULL);

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二.LVGL学习——(lv_obj基础对象) 的相关文章

  • private与构造函数

    通常我们都将构造函数的声明置于public区段 xff0c 假如我们将其放入private区段中会发生什么样的后果 xff1f 没错 xff0c 我也知道这将会使构造函数成为私有的 xff0c 这意味着什么 xff1f 我们知道 xff0c
  • 使用VS Code连接远程服务器

    目录 一 VS Code的安装与下载 二 安装插件 三 添加服务器连接配置 四 连接服务器 一 VS Code的安装与下载 关于VS Code的安装与下载及VS Code的使用方式详见如下链接 VSCode安装教程并配置C C 43 43
  • C语言 转换10进制为16进制

    实际上就是除16取余然后将其本身除以16 xff0c 得到的这一个数将它转换为具体的16进制数字的过程 xff0c 当然最后还要注意前面的字符位置的添加 span class token comment 进制之间互相转换 xff1a 将十进
  • TCP协议是如何保证传输可靠性的

    TCP确保传输可靠性的方式 校验和序列号 确认应答超时重传连接管理流量控制 xff08 滑动窗口控制 xff09 拥塞控制 校验和 xff1a TCP校验和是一个端到端的校验和 xff0c 由发送端计算 xff0c 然后由接收端验证 其目的
  • TCP的三次握手与四次挥手详解

    文章目录 TCP 协议简述TCP包首部TCP 三次握手建立连接TCP 四次挥手关闭连接常见面试题 xff1a TCP 协议简述 TCP 提供面向有连接的通信传输 xff0c 面向有连接是指在传送数据之前必须先建立连接 xff0c 数据传送完
  • IP数据报格式及分片与重组

    IP数据报 在 TCP IP 协议中 xff0c 使用 IP 协议传输数据的包被称为 IP 数据报 xff08 也叫数据包或数据报文 xff09 xff0c 每个数据包都包含 IP 协议规定的内容 IP协议提供不可靠无连接的数据报传输服务
  • mysql锁机制

    MySQL的锁机制 文章目录 MySQL的锁机制1 行锁2 表锁3 页锁4 乐观锁和悲观锁4 1悲观锁4 2乐观锁5 1InnoDB锁的特性 首先对mysql锁进行划分 xff1a 按照锁的粒度划分 xff1a 行锁 表锁 页锁按照锁的使用
  • uboot开发流程

    uboot其实就是一段比较复杂的单片机代码用来作为引导程序 xff0c 它的主要任务是初始化硬件设备 xff0c 将系统的软硬件环境带到一个合适的状态 xff0c 再将内核从一种存储介质读入到内存中 xff0c 然后跳到内核的入口点去运行
  • java的几种IO

    Java IO方式大体上可以分为三类 xff0c 基于不同的io模型可以简单分为同步阻塞的BIO 同步非阻塞的NIO和异步非阻塞的AIO IO又主要可以分为文件IO和网络IO 针对Java的网络IO模型 xff0c 可以看网络IO模型 xf
  • 哈希冲突和一致性哈希

    文章目录 哈希冲突处理哈希冲突1 开放地址法2 再散列法3 链地址法4 建立一个公共溢出区 一致性哈希普通 hash算法普通 hash 算法的缺陷 一致性哈希算法一致性 hash 算法的优点hash 环的倾斜与虚拟节点 哈希冲突 哈希函数又
  • Redis IO多路复用理解

    IO多路复用在Redis中的应用 Redis 服务器是一个事件驱动程序 xff0c 服务器处理的事件分为时间事件和文件事件两类 文件事件 xff1a Redis主进程中 xff0c 主要处理客户端的连接请求与相应 时间事件 xff1a fo
  • 分布式理论CAP,BASE

    什么是CAP理论 xff1f CAP理论指的是一个分布式系统最多只能同时满足一致性 xff08 Consistency xff09 可用性 xff08 Availability xff09 和分区容错性 xff08 Partition to
  • javaEE接收request参数以及输出结果到html页面

    1 引入需要的类 这里需要注意 xff0c servlet类不是jre自带的 xff0c 需要自己添加 添加相关类主要有以下两种方式 xff1a 下载servlet api jar xff08 tomcat自带 xff09 然后添加到cla
  • 西门子博途数据块(DB块)快速导入导出

    有些人可能会想用查表法计算CRC校验码 查表法效率和速度都很高 但是空间换时间 让你用几秒钟时间 把一张完整的表存入博途里 就算了你单身20年的手速估计也完成不了 想要几秒钟完成也不是不可以 就是导入别人的源文件 拿来主义当然块 继续上图
  • opencv4.0学习笔记

    目录 课程来源 xff1a 哔哩哔哩大学 第一节课 显示第一张图片 环境配置了一个早上 xff0c 到10 48分配置完毕 xff0c 有点难受 还好最后显示出第一张图片 include span class token operator
  • 程序人生

    http zhan renren com itonline from 61 template amp checked 61 true
  • 传感器的使用(一)-火焰传感器

    火焰传感器的介绍 1 工作电压 xff1a DC 3 3V 5V 2 灵敏度可调 xff08 可调电位器 xff09 3 工作温度 xff1a xff0d 10 xff0b 50 4 设有固定螺铨孔 xff0c 方便安装 5 探测角度 60
  • 传感器的使用(二)-温湿度传感器DHT11(HAL库实现)

    温湿度传感器的介绍 DHT11技术性能特征 工作电压范围 xff1a 3 3V 5 5V 工作电流 xff1a 平均0 5mA 输出 xff1a 单总线数字信号 测量范围 xff1a 湿度20 90 xff05 RH xff0c 温度0 5
  • Makefile详解及使用

    内容来自大丙老师的blog Makefile简介 linux环境下 xff0c 当用户编译文件过多的时候 xff0c 使用makefile可以帮助模块化编译文件 xff0c makefile是一个脚本文件 xff0c 根据规则 xff0c
  • QT绘制实时动态曲线——qcustomplot使用(二)

    在QT绘制实时动态曲线 qcustomplot使用 xff08 一 xff09 中 xff0c 介绍使用官方的demo实现动态实时曲线 官方代码移植 针对动态显示数据项目要求 xff0c 移植官方代码demo 开启绘图的函数 span cl

随机推荐

  • QT的多种功能使用记录

    设置控件的边角为圆角 xff1a border top left radius 设置左上角圆角 border top right radius 设置右上角圆角 border bottom left radius 设置左下角圆角 border
  • MYSQL之视图的使用

    视图的使用 使用视图的好处 1 简化select的字段 xff0c 方便管理 2 可以针对不同用户 xff0c 对视图进行不同的查看 也就是说可以做权限管理 3 视图的语法 CREATE VIEW MYTEST AS select 列车号
  • 模糊PID之matlab模糊控制器配置

    前言 使用模糊PID时 xff0c 需要对工具库进行配置 xff0c 模糊PID是由2个输入个3个输出组成 xff0c 输出是E和Ec xff0c 输出是Kp Ki和Kd 打开matlab后 xff0c 需要配置 MATLAB模糊配置 1
  • java url后面带sessionid_url中jsessionid的理解

    1 这是一个保险措施 因为Session默认是需要Cookie支持的 但有些客户浏览器是关闭Cookie的 这个时候就需要在URL中指定服务器上的session标识 也就是5F4771183629C9834F8382E23BE13C4C 用
  • stm32简介+gpio的C语言封装

  • 一些post请求和get请求的调用例子

    目录 post请求 1 http请求 无请求参数 请求包格式为application json 请求包包含若干字段 get请求 1 http请求 响应类型application zip 请求结果为下载一个zip的压缩文件 解压下载的压缩包
  • 80个Python经典资料(教程+源码+工具)汇总——下载目录

    大家好 xff0c 51CTO下载中心根据资料的热度和好评度收集了80个Python资料 xff0c 分享给Python开发的同学 内容包括1个Python专题 66个学习资料 7套Python源码和6个相关软件 附件较多 xff0c 无法
  • Jetson Xavier NX使用yolov5+deepsort实现CSI摄像头的目标跟踪

    文章目录 安装过程运行效果用python代码来打开CSI摄像头实现CSI摄像头目标跟踪报错 AttributeError 39 NoneType 39 object has no attribute 39 shape 39 运行效果 参考文
  • 机械周期、时钟周期、脉冲、晶振频率之间的关系

    机械周期 时钟周期 脉冲 晶振频率之间的关系 晶振频率与脉冲的关系时钟周期与脉冲的关系机械周期与时钟周期的关系 整理下学到的机械周期 时钟周期 脉冲 晶振频率之间的关系 晶振频率与脉冲的关系
  • 51单片机的串行接口介绍

    51单片机的串行接口介绍 串行口结构设置工作方式 xff08 串行口控制寄存器SCON xff09 设置波特率 51单片机内部集成1 2个可编程通用异步串行通信接口 xff08 即UART xff09 xff0c 采用全双工制式 该通信接口
  • IIC通信总线寻址

    IIC的使用 IIC总线简介IIC通信时序IIC总线寻址 IIC总线简介 1 IIC总线是一种由PHILIPS公司开发的两线式串行总线 2 IIC在硬件上是时钟总线SCL和数据总线SDA两条线构成 3 器件连接到总线都是SCL连到一起 xf
  • 通过PCF8591读取电压值(AD转换)

    通过PCF8591读取电压值 xff08 AD转换 xff09 A D的主要指标常用A D器件 PCF8591PCF8591的控制字节 A D的主要指标 1 ADC的位数 xff1a n位ADC代表 xff0c 2的n次方个刻度 2 基准源
  • STM32的光敏传感器

    STM32的光敏传感器 简介硬件连接计算公式程序 简介 1 照射光敏二极管的光强不同 xff0c 通过光敏二极管的电流大小就不同 xff0c 所以可以通过检测电流大小 xff0c 达到检测光强的目的 利用这个电流变化 xff0c 我们串接一
  • MPU6050寄存器介绍

    MPU6050寄存器介绍 MPU6050寄存器介绍电源管理寄存器1 xff08 0X6B xff09 陀螺仪配置寄存器 xff08 0X1B xff09 加速度传感器配置寄存器 xff08 0X1C xff09 FIFO使能寄存器 xff0
  • (10)查看RGB摄像头和深度摄像头

    查看RGB摄像头和深度摄像头 RGB摄像头深度摄像头 1 小车开机 xff0c 连接wifi xff0c 远程登录 登录密码 xff1a dongguan ssh wheeltec 64 192 168 0 100 2 挂载 挂载密码 xf
  • (11)色块跟踪

    色块跟踪 一 查看色块追踪的文件位置 xff1a 在ros simple follower文件下的simple followe的Launch文件 二 可调整识别色块的阈值 xff0c 追踪过程中最大速度 xff0c 中距值 xff0c PI
  • (6)ROS与STM32之间的联系

    ROS与STM32之间的联系 简介两者之间的关系两者之间的通信ROS如何在代码层面去接收stm32发送过来的数据1 整体框架2 机器人底盘类3 构造函数4 主函数5 循环功能函数6 析构函数 简介 1 如何实现ROS与stm32之间的通信
  • keil 局部变量不能查看值,显示为not in scope

    关于编译器的优化 xff0c 参考网上的8051系列的说明如下 xff1a xfeff xfeff 0级优化 xff1a 1 常数折叠 xff1a 只要有可能 xff0c 编译器就执行将表达式化为常数数字的计算 xff0c 其中包括运行地址
  • 算法——均方根检波

    均方根检波 1 均方根检波技术2 高精度采样技术3 STM32的ADC4 程序工程文件 1 均方根检波技术 1 均值检波电路通常采用电容充放电电路作为平均值电路 2 由于输出为整流平均值 xff0c 要求电容充放电时间常数相等 3 电容充放
  • 二.LVGL学习——(lv_obj基础对象)

    二 LVGL学习 xff08 lv obj基础对象 xff09 1 介绍2 对象的工作机制3 对象的创建与删除4 Screen 屏幕对象5 实例代码 xff08 1 xff09 6 实例代码 xff08 2 xff09 1 介绍 LVGL是