当前位置: 首页 > article >正文

实习技能记录【2】-----LVGL[基本概念]

LVGL主要概念

1. Screen (屏幕):

概念: 屏幕是 LVGL 应用程序中的顶层容器。它是用户界面的根对象,所有的可见 UI 元素最终都会添加到某个屏幕上(通常是活动屏幕)。
功能:
作为其他 UI 元素的父对象。
可以拥有自己的背景颜色、背景图片等样式。
LVGL 可以管理多个屏幕,但在任何给定时刻只有一个屏幕是“活动的”并显示给用户。
可以通过函数如 lv_scr_load()lv_scr_load_anim()来加载和切换不同的屏幕。
可以使用lv_screen_active()获取当前活动屏幕的指针。
本质: 屏幕本身也是一个lv_obj_t对象,只是它是最顶层的,没有父对象(除了内部的显示驱动器)。

2. Widgets (小部件):

概念: 小部件是预先构建的可交互或信息展示的 UI 组件,是构建用户界面的基本 building blocks。
功能:
提供各种常见的 UI 元素,例如按钮 (Button)、标签 (Label)、滑块 (Slider)、开关 (Switch)、图表 (Chart)、列表 (List)、选项卡视图 (Tabview)、仪表盘 (Gauge) 等等。
每个小部件都封装了特定的功能和视觉表现。
可以通过 API 函数来创建、配置和控制小部件的行为和外观。
可以响应用户输入(通过 Events)。
可以通过 Styles 进行定制。
本质: 每个小部件都是由一个或多个底层的 LVGL 对象(lv_obj_t)组合而成,并提供了特定的 API 来简化其使用。

3. Events (事件):

概念: 事件是发生在 UI 对象上的动作或状态改变,例如用户的点击、滑动、值改变,或者对象自身的创建、删除、尺寸改变等。
功能:
允许应用程序响应用户的交互和 UI 的状态变化。
可以通过为对象注册事件回调函数来处理特定的事件。
LVGL 定义了丰富的事件类型(例如
LV_EVENT_CLICKED,
LV_EVENT_VALUE_CHANGED,
LV_EVENT_DRAW_MAIN,
LV_EVENT_DELETE 等)。
一个对象可以注册多个事件回调函数来处理不同的事件
事件回调函数可以接收事件发生的对象、事件代码以及用户自定义的数据作为参数。
本质: LVGL 内部维护着一套事件管理机制,当特定事件发生时,它会遍历注册到该对象上的回调函数并执行它们。

4. Parts (部件):

概念: 许多 LVGL 小部件并非单一的视觉元素,而是由多个可独立样式化的“部件”组成
功能:
允许对小部件的不同视觉组成部分进行精细的样式控制。
例如,按钮可能包含一个主背景部件 (LV_PART_MAIN) 和一个按下时的效果部件 (LV_PART_PRESSED)。滑块可能包含一个背景 (LV_PART_MAIN)、一个指示器 (LV_PART_INDICATOR) 和一个旋钮 (LV_PART_KNOB)。
在设置样式时,可以指定要应用样式的部件。
通过 lv_obj_get_part() 等函数可以访问小部件的特定部件。
本质: 部件是小部件内部组织结构的一种逻辑划分,每个部件仍然是一个 lv_obj_t 对象或其概念上的组成部分。

5. States (状态):

概念: UI 对象可以处于不同的状态,这些状态会影响其视觉外观和行为。
功能:
LVGL 定义了多种内置状态(例如 LV_STATE_DEFAULT (默认), LV_STATE_PRESSED (按下), LV_STATE_FOCUSED (聚焦), LV_STATE_EDITED (编辑), LV_STATE_DISABLED (禁用), LV_STATE_CHECKED (选中) 等)。
一个对象可以同时处于多个状态(例如,一个被禁用的按钮也可能被按下)。
样式可以根据对象的状态进行定制,使得对象在不同交互阶段呈现不同的外观(例如,按下按钮时颜色变深)。
在设置样式时,可以使用状态标志来指定样式只在特定状态下生效。
本质: 对象内部维护着一个状态标志位,当对象的交互或属性发生变化时,这个标志位会被更新。

6. Styles (样式):

概念: 样式定义了 UI 对象的外观属性,例如背景颜色、边框宽度、字体、文本颜色、内边距、外边距、圆角等等。
功能:
允许开发者定制 UI 元素的外观。
样式是可重用的,可以应用到多个对象或对象的不同部件和状态。
可以创建和修改样式对象 (lv_style_t)。
可以使用 lv_style_set_… 系列函数设置样式的各种属性。
可以使用 lv_obj_add_style() 将一个或多个样式应用到一个对象上,并可以指定应用的部件和状态。
样式可以层叠,后添加的样式会覆盖之前添加的相同属性。
本质: 样式存储在一个 lv_style_t 结构体中,包含了各种视觉属性的值。

7. Themes (主题):

概念: 主题是一组预定义的样式集合,旨在为应用程序提供一致的视觉风格。
功能:
提供了一种快速且简单的方式来为整个应用程序设置统一的外观。
LVGL 内置了多个主题(例如默认主题、蒙特塞拉特主题等),并且也支持自定义主题。
主题通常会为各种常用的小部件定义好在不同状态下的默认样式。
可以通过 lv_theme_set_act() 函数来激活一个主题。
即使使用了主题,仍然可以针对特定的对象或部件添加或修改自定义样式,以实现更精细的控制。
本质: 主题通常是一个初始化函数,它会创建一系列预定义的 lv_style_t 对象,并在创建小部件时默认应用这些样式。

相关文章:

实习技能记录【2】-----LVGL[基本概念]

LVGL主要概念 1. Screen (屏幕): 概念: 屏幕是 LVGL 应用程序中的顶层容器。它是用户界面的根对象,所有的可见 UI 元素最终都会添加到某个屏幕上(通常是活动屏幕)。 功能: 作为其他 UI 元素的父对象。 可以拥有自己的背景颜色、背景图片等样…...

【操作系统(Linux)】——通过案例学习父子进程的线程异步性

本篇旨在通过几个案例来学习父子进程的线程异步性 一、父进程与子进程 我们将要做的&#xff1a; 创建父子进程&#xff0c;观察父子进程执行的顺序&#xff0c;了解进程执行的异步行为 源代码&#xff1a; #include <stdio.h> #include <sys/types.h> #include…...

Go 语言范围 (Range)

Go 语言范围 (Range) Go 语言是一种静态强类型、编译型、并发型编程语言&#xff0c;由 Google 开发。它的简洁性和高效性使其成为众多开发者的首选。在 Go 语言中&#xff0c;range 是一个非常有用的关键字&#xff0c;用于遍历数组、切片、字符串以及通道&#xff08;channe…...

【开源宝藏】30天学会CSS - DAY12 第十二课 从左向右填充的文字标题动画

用伪元素搞定文字填充动效&#xff1a;一行 JS 不写&#xff0c;效果炸裂 你是否曾经在设计页面标题时&#xff0c;觉得纯文字太寡淡&#xff1f;或者想做一个有动感的文字特效&#xff0c;但又不想引入 JS 甚至 SVG&#xff1f; 在这篇文章中&#xff0c;我们将通过 一段不到…...

nginx或tengine服务器,配置HTTPS下使用WebSocket的线上环境实践!

问题描述&#xff1a; HTTPS 下发起WS连接&#xff0c;连接失败&#xff0c;Chrom 浏览器报错。 socket.js:19 Mixed Content: The page at https://app.XXX.com was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint ws://172.16.10.80:903…...

WSA(Windows 安卓子系统)过检测教程

windows安卓子系统WSA的root和magisk的安装教程 安卓子系统WSLWSA的rootmagisk安装 WSA&#xff08;Windows 安卓子系统&#xff09;过检测的方法与思路 一、引言 Windows 安卓子系统&#xff08;WSA&#xff09;为 Windows 用户提供了在电脑上运行安卓应用的便利。然而&…...

蓝桥杯 B3620 x 进制转 10 进制

题目描述 给一个小整数 x 和一个 x 进制的数 S。将 S 转为 10 进制数。对于超过十进制的数码&#xff0c;用 A&#xff0c;B&#xff0c;… 表示。 输入格式 第一行一个整数 x; 第二行一个字符串 S。 输出格式 输出仅包含一个整数&#xff0c;表示答案。 输入输出样例 …...

【Oracle篇】跨字符集迁移:基于数据泵的ZHS16GBK转AL32UTF8全流程迁移

&#x1f4ab;《博主主页》&#xff1a;奈斯DB-CSDN博客 &#x1f525;《擅长领域》&#xff1a;擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(MongoDB)有了解 &#x1f496;如果觉得文章对你有所帮…...

Qt子模块的功能介绍

一、Qt 主要子模块的功能介绍 1. 核心模块 模块名称功能描述QtCore核心非GUI功能(信号槽、线程、文件IO、容器类、JSON/XML处理等)QtGui基础图形绘制(窗口系统集成、OpenGL抽象、图像处理、字体管理等)QtConcurrent高级多线程API(并行计算框架,如QtConcurrent::run)QtN…...

FRP练手:hello,world实现

方案一&#xff1a;使用 Flask&#xff08;推荐&#xff09; from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return "你好啊世界"if __name__ __main__:# 监听所有网络接口&#xff08;0.0.0.0&#xff09;&#xff0c;端口 3344app.…...

《深入探秘:分布式软总线自发现、自组网技术原理》

在当今数字化浪潮中&#xff0c;分布式系统的发展日新月异&#xff0c;而分布式软总线作为实现设备高效互联的关键技术&#xff0c;其自发现与自组网功能宛如打开智能世界大门的钥匙&#xff0c;为多设备协同工作奠定了坚实基础。 分布式软总线的重要地位 分布式软总线是构建…...

西门子S7-1200PLC 工艺指令PID_Temp进行控温

1.硬件需求&#xff1a; 西门子PLC&#xff1a;CPU 1215C DC/DC/DC PLC模块&#xff1a;SM 1231 TC模块 个人电脑&#xff1a;已安装TIA Portal V17软件 加热套&#xff1a;带加热电源线以及K型热电偶插头 固态继电器&#xff1a;恩爵 RT-SSK4A2032-08S-F 其他&#xff1…...

提升Windows安全的一些措施

由简单到复杂&#xff0c;仅供参考 一、杀毒软件&#xff1a; 1、杀毒能力&#xff1a; https://haokan.hao123.com/v?vid3883775443252827335&pdhaokan_share 2、使用注意&#xff1a; 一台主机只安装一个杀毒软件就可以了 杀毒软件会误报&#xff0c;造成正常文件…...

Jupyter notebook定制字体

一、生成配置文件 运行Anaconda Powershell Prompt终端&#xff0c;输入下面一行代码&#xff1a; jupyter notebook --generate-config 将生成文件“C:\Users\XXX\.jupyter\jupyter_notebook_config.py”&#xff0c;XXX为计算机账户名字。 二、修改配置文件 c.NotebookAp…...

内存分配中的堆(Memory Heap)详解

在计算机科学中&#xff0c;"堆"这个术语确实容易让人混淆&#xff0c;因为它同时用于描述两种完全不同的概念&#xff1a;数据结构中的堆和内存管理中的堆。上次我们讨论了数据结构中的堆&#xff0c;今天我将详细解释内存分配中的堆&#xff08;Memory Heap&#x…...

vant4+vue3上传一个pdf文件并实现pdf的预览。使用插件pdf.js

注意下载的插件的版本"pdfjs-dist": "^2.2.228", npm i pdfjs-dist2.2.228 然后封装一个pdf的遮罩。因为pdf文件有多页&#xff0c;所以我用了swiper轮播的形式展示。因为用到移动端&#xff0c;手动滑动页面这样比点下一页下一页的方便多了。 直接贴代码…...

JS | 函数柯里化

函数柯里化&#xff08;Currying&#xff09;&#xff1a;将一个接收多个参数函数&#xff0c;转换为一系列只接受一个参数的函数的过程。即 逐个接收参数。 例子&#xff1a; 普通函数&#xff1a; function add(a, b, c) {return a b c; } add(1, 2, 3); // 输出 6柯里化…...

软件工程基础之设计模式

目录 单例模式(Singleton Pattern)工厂方法模式(Factory Method Pattern)抽象工厂模式(Abstract Factory Pattern)原型模式(Prototype Pattern)适配器模式(Adapter Pattern)单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。应用场景:…...

2025 数字中国创新大赛数字安全赛道数据安全产业积分争夺赛初赛-东部赛区WriteUp

2025 数字中国创新大赛数字安全赛道数据安全产业积分争夺赛初赛-东部赛区WriteUp 数据安全:ez_upload(60分)&#xff1a; 模型安全&#xff1a;数据分析&#xff1a;溯源与取证&#xff1a;1-1&#xff1a;1-2&#xff1a; 数据社工&#xff1a;2-2:2-3:2-4: 数据跨境&#xff…...

2025 年网络安全终极指南

我们生活在一个科技已成为日常生活不可分割的一部分的时代。对数字世界的依赖性日益增强的也带来了更大的网络风险。 网络安全并不是IT专家的专属特权&#xff0c;而是所有用户的共同责任。通过简单的行动&#xff0c;我们可以保护我们的数据、隐私和财务&#xff0c;降低成为…...

1.6-抓包技术(Burp Suite\Yakit抓包\Web、APP、小程序)

1.6-抓包技术&#xff08;Burp Suite\Yakit抓包\Web、APP、小程序&#xff09; 如果要使用抓包软件&#xff0c;基本上第一步都是要安装证书的。原因如下&#xff1a; 客户端&#xff08;浏览器或应用&#xff09;会检测到证书不受信任&#xff0c;并弹出 证书错误&#xff0…...

图解力扣回溯及剪枝问题的模板应用

文章目录 选哪个的问题17. 电话号码的字母组合题目描述解题代码图解复杂度 选不选的问题78. 子集题目描述解题代码图解复杂度 两相转化77. 组合题目描述解题代码法一&#xff1a;按选哪个的思路法二&#xff1a;按选不选的思路 图解选哪个&#xff1a;选不选 复杂度 选哪个的问…...

Elasticsearch 8.X 如何利用嵌入向量提升搜索能力?

众所周知&#xff0c;Elasticsearch 是一个非常流行的搜索引擎&#xff0c;因为它速度快、扩展性强&#xff0c;尤其擅长全文搜索。 近两年&#xff0c;向量嵌入&#xff08;Vector Embedding&#xff09;技术的引入&#xff0c;让 Elasticsearch 在处理高级搜索场景时变得更强…...

MySQL体系架构(一)

1.1.MySQL的分支与变种 MySQL变种有好几个,主要有三个久经考验的主流变种:Percona Server,MariaDB和 Drizzle。它们都有活跃的用户社区和一些商业支持,均由独立的服务供应商支持。同时还有几个优秀的开源关系数据库,值得我们了解一下。 1.1.1.Drizzle Drizzle是真正的M…...

【Docker项目实战】使用Docker部署ToDoList任务管理工具

【Docker项目实战】使用Docker部署ToDoList任务管理工具 一、ToDoList介绍1.1 ToDoList简介1.2 ToDoList主要特点二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载ToDoList镜像…...

深度强化学习基础 0:通用学习方法

过去自己学习深度强化学习的痛点&#xff1a; 只能看到各种术语、数学公式勉强看懂&#xff0c;没有建立清晰且准确关联 多变量交互关系浮于表面&#xff0c;有时候连环境、代理控制的变量都混淆 模型种类繁多&#xff0c;概念繁杂难整合、对比或复用&#xff0c;无框架分析所…...

Traefik应用:配置容器多个网络时无法访问问题

Traefik应用&#xff1a;配置容器多个网络时无法访问问题 介绍解决方法问题原因&#xff1a; **容器多网络归属导致 Traefik 无法正确发现路由规则**。解决方案方法 1&#xff1a;将应用容器 **仅连接** 到 traefik-public 网络方法 2&#xff1a;显式指定 Traefik 监听的网络 …...

虚幻5的C++调试踩坑

本地调试VS附加调试 踩坑1 预编译版本的UE5没有符号文件&#xff0c;无法调试源码 官方代码调试所需要的符号文件bdp需要下载导入。我安装的5.5.4是预编译版本&#xff0c;并非ue5源码。所以不含bdp文件。需要调试官方代码则需要通过EPIC中下载安装。右键UE版本&#xff0c;打…...

react 中将生成二维码保存到相册

需求&#xff1a;生成二维码&#xff0c;能保存到相册 框架用的 react 所以直接 qrcode.react 插件&#xff0c;然后直接用插件生成二维码&#xff0c;这里一定要写 renderAs{‘svg’} 属性&#xff0c;否则会报错&#xff0c;这里为什么会报错&#xff1f;&#xff1f;&#…...

通信协议详解(十):PSI5 —— 汽车安全传感器的“抗干扰狙击手”

一、PSI5是什么&#xff1f; 一句话秒懂 PSI5就像传感器界的“防弹信使”&#xff1a;在汽车安全系统&#xff08;如气囊&#xff09;中&#xff0c;用两根线同时完成供电数据传输&#xff0c;即便车祸时线路受损&#xff0c;仍能确保关键信号准确送达&#xff01; 基础概念…...