LVGL对象的盒子模型和样式

文章目录

      • 🧱 LVGL 对象盒子模型结构
      • 🔍 组成部分说明
      • 🎮 示例代码
      • 📌 总结一句话
    • 🧱 一、样式的本质:`lv_style_t` 对象
    • 🎨 二、样式应用的方式
    • 🧩 三、样式属性分类(核心)
    • 🪄 四、多个样式如何合成?
    • 🧪 五、简易例子
    • ✅ 总结一句话


在 LVGL(Light and Versatile Graphics Library)中,对象的**盒子模型(Box Model)**类似于 Web/CSS 的布局思想,用于描述对象的结构、边距、填充等空间关系。下面是简明清晰的讲解:


🧱 LVGL 对象盒子模型结构

+-------------------------------+ ← 外部对象区域
|         Margin                |
|   +-----------------------+   |
|   |      Border           |   |
|   |   +---------------+   |   |
|   |   |   Padding     |   |   |
|   |   | +----------+  |   |   |
|   |   | |  Content |  |   |   |
|   |   | +----------+  |   |   |
|   |   +---------------+   |   |
|   +-----------------------+   |
+-------------------------------+

🔍 组成部分说明

区域描述
Content对象真正显示的内容(文字、图像等)
Padding内容与边框之间的内边距,设置方式如 lv_obj_set_style_pad_all()
Border对象的边框,样式设置如 lv_obj_set_style_border_width()
Margin对象与其他对象之间的外边距,仅在使用布局时起作用

🎮 示例代码

lv_obj_t *btn = lv_btn_create(lv_scr_act());
lv_obj_set_style_pad_all(btn, 10, 0);       // 设置 padding
lv_obj_set_style_border_width(btn, 2, 0);   // 设置 border
lv_obj_set_style_margin_all(btn, 5, 0);     // 设置 margin

📌 总结一句话

LVGL 的盒子模型由 margin、border、padding 和 content 组成,控制对象与周围及自身内容的布局关系。

在 LVGL 中,样式(Style)系统是实现美观界面和灵活定制的核心机制之一。它允许开发者控制对象的颜色、大小、圆角、边框、阴影、透明度、字体等属性。下面我们分层次讲清楚:


🧱 一、样式的本质:lv_style_t 对象

LVGL 用 lv_style_t 结构体来描述样式,例如:

static lv_style_t style;
lv_style_init(&style);
lv_style_set_bg_color(&style, lv_color_hex(0xff0000));  // 设置背景色为红色

一个 style 就是一组视觉属性集合,不属于某个特定对象,可以多个对象复用。


🎨 二、样式应用的方式

样式不是自动生效的,必须绑定到对象上才能生效:

lv_obj_add_style(obj, &style, LV_PART_MAIN);

其中:

  • obj 是目标对象;
  • &style 是样式指针;
  • LV_PART_MAIN 是应用到哪个部件(part),对象可能有多个部分,如主区域、指示器、滑块等。

🧩 三、样式属性分类(核心)

属性类别典型属性(函数)说明
背景lv_style_set_bg_color()背景颜色
边框lv_style_set_border_width()边框宽度
内边距lv_style_set_pad_all()padding
阴影lv_style_set_shadow_width()阴影大小
字体/文本lv_style_set_text_font()字体
圆角lv_style_set_radius()圆角半径
不透明度lv_style_set_bg_opa()背景透明度

🪄 四、多个样式如何合成?

LVGL 样式系统支持多个样式叠加:

  1. 优先级排序(重要!):

    • 本地样式(lv_obj_add_style() 加的) > 主题样式 > 默认样式;
  2. 相同属性时,后添加的会覆盖先添加的;

  3. 不同属性时会叠加。


🧪 五、简易例子

lv_obj_t *label = lv_label_create(lv_scr_act());
lv_label_set_text(label, "Hello LVGL!");// 创建样式
static lv_style_t style;
lv_style_init(&style);
lv_style_set_text_color(&style, lv_color_hex(0x0000FF));  // 蓝色字体
lv_style_set_text_font(&style, &lv_font_montserrat_20);   // 大字体// 应用样式
lv_obj_add_style(label, &style, LV_PART_MAIN);

✅ 总结一句话

LVGL 的样式系统通过 lv_style_t 控制对象视觉属性,支持叠加、复用和局部应用,功能类似于 CSS。

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

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

相关文章

Github上如何准确地搜索开源项目

Github上如何准确地搜索开源项目: 因为寻找项目练手是最快速掌握技术的途径,而Github上有最全最好的开源项目。 就像我的毕业设计“机器翻译”就可以在Github上查找开源项目来参考。 以下搜索针对:项目名的关键词,关注数限制&a…

正点原子IMX6U开发板移植Qt时出现乱码

移植Qt时出现乱码 1、前言2、问题3、总结 1、前言 记录一下正点原子IMX6U开发板移植Qt时出现乱码的解决方法,方便自己日后回顾,也可以给有需要的人提供帮助。 2、问题 用正点原子IMX6U开发板移植Qt时移植Qt后,sd卡里已经存储了Qt的各种库&…

python-django项目启动寻找静态页面html顺序

目录结构 settings模块 urls模块 views模块 1.settings文件下没有DIR目录,按照各app注册顺序寻找静态页面 启动效果,直接返回注册的app即app01下的templates文件夹下的html页面 2.settings文件添加上DIR目录 启动效果,会优先去找项目下的templates文件…

MySQL索引详解(上)(结构/分类/语法篇)

一、索引概述 索引本质是帮助MySQL高效获取数据的排序数据结构(类似书籍目录),通过减少磁盘I/O次数提升查询效率。其核心价值体现在大数据量场景下的快速定位能力,但同时带来存储和维护成本。 核心特点: 优点&#…

数据集-目标检测系列- 烟雾 检测数据集 smoke >> DataBall

数据集-目标检测系列- 消防 浓烟 检测数据集 smoke>> DataBall 数据集-目标检测系列- 烟雾 检测数据集 smoke >> DataBall * 相关项目 1)数据集可视化项目:gitcode: https://gitcode.com/DataBall/DataBall-detections-10…

docker + K3S + Jenkins + Harbor自动化部署

最近公司在研究自动化部署的一套流程,下面记录一下配置流程 需要提前准备好Jenkins Harbor Git(其他管理工具也可以) 我这里的打包编译流程是Jenkins上配置打包任务-->自动到git目录下找打包文件---->项目编译后打镜像包------>打完镜像包将镜像上传到…

《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互)-《打砖块:向量反射与实时物理模拟》MATLAB教程

《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互)-《打砖块:向量反射与实时物理模拟》MATLAB教程 🎮 文章目录 《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇&#xff08…

Redisson 看门狗机制

何为看门狗 看门狗机制的主要作用是自动续期锁,确保在节点完成任务之前,锁不会过期。具体来说,当一个节点获取到锁后,看门狗会定期检查该锁的过期时间,并在必要时延长锁的过期时间,确保节点可以顺利完成任…

[架构之美]linux常见故障问题解决方案(十九)

[架构之美]linux下常见故障问题解决方案 一,文本文件忙 问题一:rootwh-VMware-Virtual-Platform:/home/hail# cp /root/containerd/bin/* /usr/bin/ cp: 无法创建普通文件 ‘/usr/bin/containerd’: 文本文件忙 在Linux系统中遇到“文本文件忙”错误时…

QT实现曲线图缩放、拖拽以及框选放大

.h文件 protected: void saveAxisRange();void wheelEvent(QWheelEvent *event) override;void mousePressEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;void mouseReleaseEvent(QMouseEvent *event) override;private:QPoint m_…

【Pandas】pandas DataFrame corr

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 TrueDataFrame.any(*[, axis, bool_only, skipna])用于判断…

青藏高原七大河流源区径流深、蒸散发数据集(TPRED)

时间分辨率 月空间分辨率 1km - 10km共享方式 开放获取数据大小 83.27 MB数据时间范围 1998-07-01 — 2017-12-31元数据更新时间 2024-07-22 数据集摘要 通过构建耦合积雪、冻土、冰川等冰冻圈水文物理过程的WEB-DHM模型(Water and Energy Budget-based Distribute…

window环境下,如何通过USB接口控制打印机

虽然说大多数情况下,我们可以非常便利的通过打印机驱动来控制打印机,但还是有一些特殊情况,导致无法通过打印机驱动来完成我们预想的任务,比如,打印机只是一个系统设备中的一部分,需要协调其它设备一起工作…

CDGP数据治理主观题评分标准与得分策略

1.数据模型题目评分标准 1)准确理解题目中所描述的业务逻辑和需求得[1分] 2)正确使用模型设计方法,使用信息工程、信息建模集成定义、巴克符号、陈氏符号等其中一种得[1分] 3)正确设计实体和属性,题目中涉及的实体数量为25-30个,10个以内得[2分],10-20个得[3分],25个…

工业设计破局密码:3D 可视化技术点燃产业升级引擎

3D可视化是一种将数据、信息或抽象概念以三维图形、模型和动画的形式呈现出来的技术。3D可视化技术通过构建三维数字孪生体,将设计思维转化为可交互的虚拟原型,不仅打破了传统二维设计的空间局限,更在效率、精度与用户体验层面开创了全新维度…

Qt中在子线程中刷新UI的方法

Qt中在子线程中刷新UI的方法 在Qt中UI界面并不是线程安全的,意味着在子线程中不能随意操作UI界面组件(比如按钮、标签)等,如果强行操作这些组件有可能会导致程序崩溃。那么在Qt中如何在子线程中刷新UI控件呢? 两种方…

为了摸鱼和吃瓜,我开发了一个网站

平时上班真的比较累,摸鱼和吃瓜还要跳转多个平台的话,就累上加累了。 所以做了一个聚合了全网主流平台热搜的网站。 目前市面上确实有很多这种网站了,所以目前最主要有两点和他们不同: 给热搜列表增加了配图,刷的时候…

操作系统学习笔记第2章 (竟成)

第 2 章 进程管理 【考纲内容】 1.进程与线程: (1) 进程 / 线程的基本概念; (2) 进程 / 线程的状态与转换; (3) 线程的实现:内核支持的线程;线程库支持的线程; (4) 进程与线程的组织与控制; (5)…

77.评论日记

房间要经常搞卫生,不然会很多灰,很多头发,很多垃圾。 当然,即使一直搞卫生,在一些看不到的角落也是会慢慢囤积垃圾。 想要把那些角落也打扫干净,没别的办法,只有把那个角落上所有的东西都移开&a…

语音合成之十二 TTS声学编解码器的演进

TTS声学编解码器的演进 1 引言:声码器/声学编解码器在现代TTS中的关键作用2 奠定基石:从早期声码器到神经合成的曙光3. HiFi-GAN: 革新高效高保真波形生成4. 新的疆域:面向富语义TTS的先进声学编解码器5. XCodec2.0: 统一声学与语义信息6.BiC…