实习技能记录【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 对象,并在创建小部件时默认应用这些样式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:C 目录 前言 一、列表初始化 1. 大括号初始化 2. initializer_list 二、右值引用和移动语义 1. 左值和右值 2. 左值引用和右值引用 引用延长生命周期 左…

软考中级-软件设计师 2022年下半年上午题真题解析:通关秘籍+避坑指南

📚 目录(快速跳转) 选择题(上午题)(每题1分,共75分)一、 计算机系统基础知识 🖥️💻 题目1:计算机硬件基础知识 - RISC(精简指令集计算…

基于MCP协议调用的大模型agent开发02

目录 在AI agent的开发过程中,如何使用mcp服务器作为大模型的工具调用‘百宝箱’? FastAPI FastMCP 本系列: 基于MCP协议调用的大模型agent开发01-CSDN博客 基于MCP协议调用的大模型agent开发02-CSDN博客 在AI agent的开发过程中,…

ES6(8) Fetch API 详解

1. Fetch API 简介 fetch 是 ES6 提供的基于 Promise 的 API,用于发送 HTTP 请求并处理服务器响应数据。与传统的 XMLHttpRequest 相比,fetch 语法更加简洁,使用 Promise 进行异步处理,避免了回调地狱。 1.1 fetch() 的基本用法 …

原生SSE实现AI智能问答+Vue3前端打字机流效果

实现流程: 1.用户点击按钮从右侧展开抽屉(drawer),打开模拟对话框 2.用户输入问题,点击提问按钮,创建一个SSE实例请求后端数据,由于SSE是单向流,所以每提一个问题都需要先把之前的实…

CUDA 工具链将全面原生支持 Python

根据 NVIDIA 在 2025 年 GTC 大会上的官宣,CUDA 工具链将全面原生支持 Python 编程,这一重大更新旨在降低 GPU 编程门槛,吸引更广泛的 Python 开发者进入 CUDA 生态。以下是核心信息整合: 1. 原生支持的意义与背景 无需 C/C 基础…

jupyter notebook 显示conda虚拟环境

使用 nb_conda_kernels 安装 nb_conda_kernels:这个包可以自动从你的 Conda 环境中发现并列出内核。 conda activate base # 确保你在 base 环境或任何其他环境中安装 conda install nb_conda_kernels显示jupyternotebook当前所在的位置。

【AI】MCP概念

一文讲透 MCP(附 Apifox MCP Server 内测邀请) 7分钟讲清楚MCP是什么?统一Function calling规范,工作量锐减至1/6,人人手搓Manus!? | 一键链接千台服务器,几行代码接入海量外部工具…

WSL1升级到WSL2注意事项

今天要在WSL上安装docker,因为机器上安装了wsl1,docker安装后启动不了,通过询问deepseek发现docker只能在wsl2上安装,因此就想着将本机的wsl1升级到wsl2。 确保你的 Windows 系统是 Windows 10(版本 1903 及以上&…

Pycharm常用快捷键总结

主要是为了记录windows下的PyCharm的快捷键,里面的操作都试过了功能描述会增加备注。 文件操作 快捷键功能描述Ctrl N新建文件Ctrl Shift N根据名称查找文件Ctrl O打开文件Ctrl S保存当前文件Ctrl Shift S另存为Alt F12打开终端(Terminal&…

电池分选机:新能源时代的品质守护者|深圳比斯特自动化

在这个新能源蓬勃发展的时代,电池作为能量的存储与释放单元,其性能与质量直接关系到整个系统的稳定运行与效率提升。而电池分选机,作为电池生产流程中的关键一环,正扮演着品质守护者的角色,为新能源产业的高质量发展保…

认识 Linux 内存构成:Linux 内存调优之虚拟内存与物理内存

写在前面 博文内容涉及 Linux 内存构成基本认知包括虚拟内存和物理内存映射,多级页表和MMU简单认知理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的…

SCI科学论文的重要组成部分

科学论文的核心结构 科学论文通常遵循IMRAD结构,即: 引言(Introduction)方法(Methods)结果(Results)讨论(Discussion) 除此之外,还包括其他几个关键部分。让我为您详细介绍每个部分的作用和重要性: 1. 标题(Title) 标题是论文…

期权时间价值与隐含波动率怎么选?

期权隐含波动率与时间价值要怎么选?期权隐含波动率IV对期权价格有着巨大的影响。整体来看,期权隐波与期权价格呈正相关关系。当期权隐波从低水平上升时,期权价格也会相应上涨;反之,当隐波下降,期权价格则会…

STM32 HAL库扩大USB CDC的输入缓冲区

STM32 HAL库,使用USB, 扩大输入暂存区的方法 使用STM32的USB通讯CubeMX建立配置Serial Wire时钟配置USB配置时钟频率设置代码编写运行效果总结使用STM32的USB通讯 STM32可以不用使用串口转换直接和USB通讯。这给串口调试提供了极大的方便。编程,我使用了STM32CubeIDE编程。这…

ffmpeg函数简介(封装格式相关)

文章目录 🌟 前置说明:FFmpeg 中 AVFormatContext 是什么?🧩 1. avformat_alloc_context功能:场景: 🧩 2. avformat_open_input功能:说明:返回值: &#x1f9…

费马小定理

快速幂 理论 a n a a ⋯ a a^n a a \cdots a anaa⋯a,暴力的计算需要 O(n) 的时间。 快速幂使用二进制拆分和倍增思想,仅需要 O(logn) 的时间。 对 n 做二进制拆分,例如, 3 13 3 ( 1101 ) 2 3 8 ⋅ 3 4 ⋅ 3 1 3^{13}…

ADGaussian:用于自动驾驶的多模态输入泛化GS方法

25年4月来自香港中文大学和浙大的论文“ADGaussian: Generalizable Gaussian Splatting for Autonomous Driving with Multi-modal Inputs”。 提出 ADGaussian 方法,用于可泛化的街道场景重建。所提出的方法能够从单视图输入实现高质量渲染。与之前主要关注几何细…

js中this指向问题

在js中,this关键字的指向是一个比较重要的概念,它的值取决于函数的调用方式。 全局状态下 //全局状态下 this指向windowsconsole.log("this", this);console.log("thiswindows", this window); 在函数中 // 在函数中 this指向win…

我的NISP二级之路-03

目录 一.ISMS 二.IP 三.http 四.防火墙 五.文件 解析 解析 六.攻击 解析 解析 七.风险管理工程 八.信息系统安全保护等级 九.我国信息安全保障 一.ISMS 1.文档体系建设是信息安全管理体系(ISMS)建设的直接体现,下列说法不正确的是: A&#…