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

【LVGL速成】LVGL修改标签文本(GUI Guider生成的字库问题)

目录

前置篇章:

一.问题背景

二.失败方案

三.成功方案

        1.Gui guider的源码结构

2.手动生成字体

3.Keil中配置相关文件

​编辑

4.修改文字

四.字体样式函数说明


前置篇章:

【LVGL快速入门(二)】LVGL开源框架入门教程之框架使用(UI界面设计)_lvgl 菜鸟教程-CSDN博客

一.问题背景

        笔者最近在学习LVGL框架,同时准备使用该框架作为课程设计的一部分,于是需要从静态显示进阶到动态显示以及事件交互。一方面由于笔者是初次接触LVGL,对它并不熟悉,另一方面由于其网络上的针对性具体资料太少,所以学习效率很低。

        由于上一篇文章笔者完成了很基础的静态界面设计和移植。于是此次便向原有工程上先进行试验,先将原有文本改成可以动态变化的文本。

二.失败方案

        笔者一开始选择使用设置Label属性中的setText函数对文本进行设置,在主函数中加入这个函数以为能够修改文本值:

lv_label_set_text(guider_ui.screen_label_1, "6");

        结果:

         除了屏幕中的一个白框之外,文本全部消失不见。

        然后笔者又换了很多不同的位置,无论是将这句放到主函数还是界面ui函数中,显示均不能正常。无关乎位置以及数量,修改之后显示的均为白框。

        最后笔者观察发现为字库问题,后验证了成功方案。

三.成功方案

        1.Gui guider的源码结构

        首先我们要清楚的是GUI guider这个设计工具生成出来的源码结构构成。其生成的src文件夹下包含两个文件夹:

        

        其中:

  • custom文件夹包含由用户进行自由操作的文件,主要完成用户特定的功能实现。
  • generated文件夹包含由Gui guider生成的源文件,其中部分是用户设计的界面数据,部分是字库数据和控件数据,还有一些接入LVGL的接口
    这个文件夹下包含的就是我们设计且使用了的字库文件(即UI界面上的文字数据)这个文件包含了我们用户生成的字库文件(生成但未使用),也就是说我们再使用某个自定义字体文字时需要先手动生成,这里也是笔者踩坑的地方。 这里包含的是用户设计的界面函数这里包含的是Gui guider工具生成所有源码的外部接口,调用这里的函数即可绘制界面。

2.手动生成字体

        前面强调过,在我们使用某个字体时(特别是自己导入的自定义字体)一定一定要先在Gui guider中生成字体。

        输入想要生成的字体后看到以下提示即为成功:

        生成的字库文件全部在这个文件夹里:

3.Keil中配置相关文件

        向管理器中添加我们生成的字库文件:

        点开文件能很清楚地看到我们自己生成的文字数据:

        一般来说UI中已经设计使用的字体都会在gui_guider.h中进行声明,如:

//声明图片
LV_IMG_DECLARE(_cloudblack_alpha_160x128);
LV_IMG_DECLARE(_1693149324150_alpha_58x57);//声明文字
LV_FONT_DECLARE(lv_font_YunFeng_24)
LV_FONT_DECLARE(lv_font_montserratMedium_16)

        函数原型为:

#define LV_FONT_DECLARE(font_name) extern const lv_font_t font_name;

        如果想要使用刚刚生成的文字的话需要在这里手动声明:

4.修改文字

        完成以上工作后我们就可以在我们自己的代码里自由修改文字了。

lv_label_set_text(ui->screen_label_1, "难逃爱意");
lv_obj_set_style_text_font(ui->screen_label_1, &lv_font_YunFeng_24, LV_PART_MAIN|LV_STATE_DEFAULT);

四.字体样式函数说明

        最后对setup_scr_screen.c中的以下有关文字的函数做一个说明:

  • lv_obj_set_style_bg_opa(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置背景的不透明度(opa)为0,即完全透明。LV_PART_MAIN指定样式应用于整个对象,LV_STATE_DEFAULT指定样式应用于对象的默认状态。
  • lv_obj_set_style_border_width(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置边框的宽度为0,这意味着对象不会有边框。同样,样式应用于整个对象并在默认状态下生效。
  • lv_obj_set_style_radius(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置对象的圆角半径为0,这意味着对象不会有圆角。该样式应用于整个对象并在默认状态下生效。
  • lv_obj_set_style_shadow_width(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置对象阴影的宽度为0,即对象不会有阴影。样式应用于整个对象并在默认状态下生效。
  • lv_obj_set_style_text_color(ui->screen_label_1, lv_color_hex(0xffffff), LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置文本颜色为白色(十六进制值为0xffffff)。该样式应用于整个对象并在默认状态下生效。
  • lv_obj_set_style_text_font(ui->screen_label_1, &lv_font_YunFeng_24, LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置文本字体为lv_font_YunFeng_24,这是LVGL支持的字体之一。样式应用于整个对象并在默认状态下生效。
  • lv_obj_set_style_text_opa(ui->screen_label_1, 255, LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置文本的不透明度为255,即文本完全不透明。样式应用于整个对象并在默认状态下生效。
  • lv_obj_set_style_text_letter_space(ui->screen_label_1, 2, LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置文本中字母之间的间距为2个像素。样式应用于整个对象并在默认状态下生效。
  • lv_obj_set_style_text_line_space(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置文本行之间的间距为0个像素。样式应用于整个对象并在默认状态下生效。
  • lv_obj_set_style_text_align(ui->screen_label_1, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置文本对齐方式为居中对齐。样式应用于整个对象并在默认状态下生效。
  • lv_obj_set_style_pad_top(ui->screen_label_1, 8, LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置对象顶部内边距为8个像素。样式应用于整个对象并在默认状态下生效。
  • lv_obj_set_style_pad_right(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置对象右侧内边距为0个像素。样式应用于整个对象并在默认状态下生效。
  • lv_obj_set_style_pad_bottom(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置对象底部内边距为0个像素。样式应用于整个对象并在默认状态下生效。
  • lv_obj_set_style_pad_left(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);

    • 设置对象左侧内边距为0个像素。样式应用于整个对象并在默认状态下生效。

相关文章:

【LVGL速成】LVGL修改标签文本(GUI Guider生成的字库问题)

目录 前置篇章: 一.问题背景 二.失败方案 三.成功方案 1.Gui guider的源码结构 2.手动生成字体 3.Keil中配置相关文件 ​编辑 4.修改文字 四.字体样式函数说明 前置篇章: 【LVGL快速入门(二)】LVGL开源框架入门教程之框架使用(UI界面设计)_lvgl…...

C语言项目实践-贪吃蛇

⽬录: 1. 游戏背景 2. 游戏效果演⽰ 3. 实现的⽬标 4. 实现的定位 5. 技术要点 6. 贪吃蛇游戏设计与分析 7. 贪吃蛇游戏数据结构设计 8. 相关Win32API介绍 9. 参考代码 正文开始 1. 游戏背景 贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅块&#xf…...

在kanzi 3.9.8里使用API创建自定义材质

1. kanzi studio设置 1.1 创建一个纹理贴图,起名Render Target Texture 1.2 创建一个Image节点,使用该贴图 2. 代码设置 2.1 创建一个自定义节点类 class mynode2d : public Node2D { public: virtual void renderOverride(Renderer3D& renderer…...

IDEA中通义灵码的使用技巧

大家好,我是 V 哥。在日常写代码的过程中,通过 AI 工具辅助开发已是当下程序员惯用的方式,V 哥在使用了众多的 AI 工具后,多数情况下,选择通义灵码来辅助开发,尤其是解释代码和生成单元测试功能甚是好用&am…...

JS中let var 和const区别

在JavaScript中,let、var 和 const 都是用来声明变量的关键字,但它们之间有几个关键的区别: 作用域(Scope): var 声明的变量拥有函数作用域(function scope),这意味着如果 var 变量在…...

ansible详细介绍和具体步骤

Ansible简介 1.1 Ansible的基本概念 Ansible是一款开源的自动化工具,旨在简化IT操作的复杂性。它由Michael DeHaan创建,并于2012年发布,随后在2015年被Red Hat收购。Ansible的核心理念是“简单即美”,它通过使用YAML&#xff08…...

利用LangChain与LLM打造个性化私有文档搜索系统

我们知道LLM(大语言模型)的底模是基于已经过期的公开数据训练出来的,对于新的知识或者私有化的数据LLM一般无法作答,此时LLM会出现“幻觉”。针对“幻觉”问题,一般的解决方案是采用RAG做检索增强。 但是我们不可能把…...

linux中的软、硬链接

目录 引言 简单介绍 如何理解软硬链接 链接的应用 环路问题 引言 在Linux操作系统的广阔天地中,文件管理是其核心功能之一。而软链接和硬链接作为Linux文件系统中的两种特殊链接方式,它们为用户提供了灵活的文件访问途径和高效的磁盘空间利用手段。…...

Ubuntu 系统、Docker配置、Docker的常用软件配置(下)

前言 书接上文,现在操作系统已经有了,作为程序的载体Docker也安装配置好了,接下来我们需要让Docker发挥它的法力了。 Docker常用软件的安装 1.Redis 缓存安装 1.1 下载 docker pull redis:7.4.1 #可改为自己需要的版本 1.2 创建本地目录存储…...

jdk,openjdk,oraclejdk

Java是开发语言,不是软件。JDK是软件,使用OpenJDK是免费的,一直免费。而且OpenJDK正儿巴经的Java社区推出来的JDK。 Oracle JDK主要是面向付费能力强的企业用户,收费已经好多年了,不是一两年的事,JDK8是JDK…...

Docker Hub 镜像加速器

零、参考资料 https://gist.github.com/y0ngb1n/7e8f16af3242c7815e7ca2f0833d3ea6Daemon proxy configuration | Docker Docs 一、解决方案 1、问题现象 Error response from daemon: Get "https://index.docker.io/v1/search?qcarlasim%2Fcarla&n25": dia…...

DevOps赋能:优化业务价值流的实战策略与路径(上)

上篇:价值流引领与可视化体系构建 一、前言 在快速迭代的软件项目和产品开发生态中,我们始终围绕两个核心目标:一是确保每一项工作都能为客户创造实际价值,这是产品团队的核心使命;二是确保这些有价值的工作能够高效…...

int的取值范围

原码(True form):原码是一种计算机中对数字的二进制表示方法,数码序列中最高位为符号位,符号位为0表示正数,符号位为1表示负数;其余有效值部分用二进制的绝对值表示。 反码&#xf…...

图文检索(16):IDC: Boost Text-to-Image Retrieval via Indirect and Direct Connections

IDC: Boost Text-to-Image Retrieval via Indirect and Direct Connections 摘要3 方法3.1 直接连接3.2 间接连接3.3 DLB 正则化 结论 发布时间(2024 LREC-COLING) 标题:IDC:通过间接和直接连接增强文本到图像的检索 摘要 本文&…...

企业数字化转型:重识、深思、重启新征程-亿发

在当下这个日新月异的时代,企业数字化转型已然成为众多企业竞相追逐的发展方向,可真正能将其领悟透彻并有效落地实施的企业,却并非比比皆是。此刻,亿发软件针对企业数字化转型展开一次更为深入的重识、全面的深思,进而…...

仓颉刷题录-字符串数字转换(一)

文章目录 背景题目:交换后字典序最小的字符串个人感受 这是双子专栏: Cangjie仓颉程序设计-个人总结 本专栏还在持续更新: 仓颉编程cangjie刷题录 背景 报名了一个仓颉的比赛,感觉条件要求挺低的,就想上。哈哈哈。但…...

SpringBoot【实用篇】- 配置高级

文章目录 目标:1.ConfigurationProperties2.宽松绑定/松散绑定3. 常用计量单位绑定4.数据校验 目标: ConfigurationProperties宽松绑定/松散绑定常用计量单位绑定数据校验 1.ConfigurationProperties ConfigurationProperties 在学习yml的时候我们了解…...

liunx CentOs7安装MQTT服务器(mosquitto)

查找 mosquitto 软件包 yum list all | grep mosquitto出现以上两个即可进行安装,如果没有出现则需要安装EPEL软件库。 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm查看 mosquitto 信息 yum info mosquitto安装 mosquitt…...

【银河麒麟高级服务器操作系统】虚拟机lvm分区丢失现象分析及解决建议

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 环境描述 系统环境 物理机/虚拟机/云/容器 虚拟…...

Android 原子性类型都有哪些

1. 基本类型原子类 AtomicInteger:用于对整数进行原子操作,如incrementAndGet()方法可以原子地将当前值加1并返回新值,getAndSet()方法可以原子地设置新值并返回旧值。AtomicLong:和AtomicInteger类似,用于长整型的原…...

AutoDL部署大模型后,除了Chat:手把手教你用本地API接口玩转文档总结、代码生成和智能客服

AutoDL部署大模型后,除了Chat:手把手教你用本地API接口玩转文档总结、代码生成和智能客服 当你已经在AutoDL上成功部署了大语言模型,并验证了基础的聊天功能后,是否思考过如何将这些能力真正融入日常工作流?本文将带你…...

电视盒子变身高性能服务器:Armbian系统终极刷机指南

电视盒子变身高性能服务器:Armbian系统终极刷机指南 【免费下载链接】amlogic-s9xxx-armbian Supports running Armbian on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk…...

Local AI MusicGen商业应用:电商视频智能配乐

Local AI MusicGen商业应用:电商视频智能配乐 你是不是也遇到过这样的烦恼?制作电商短视频时,翻遍了免费音乐库,要么版权有问题,要么风格不搭,要么就是千篇一律的背景音。自己配乐?没那个时间和…...

CH340/CH341安卓USB主机模式开发实战

1. CH340/CH341安卓USB主机模式开发入门 很多开发者第一次接触安卓USB主机模式开发时,都会遇到一个典型问题:为什么我的手机连上CH340模块后毫无反应?这通常是因为安卓设备默认工作在从机模式(USB Device Mode),而连接串口设备需要…...

Qwen3-0.6B应用案例:如何用它快速生成文案和邮件回复

Qwen3-0.6B应用案例:如何用它快速生成文案和邮件回复 1. 引言:轻量级AI写作助手 在日常工作中,我们经常需要处理大量文字工作:撰写产品介绍、回复客户邮件、编写营销文案等。这些任务虽然不复杂,但耗时耗力。Qwen3-0…...

对比学习演进笔记:从Memory Bank到MoCo的负样本队列设计

1. 对比学习的核心思想与演进背景 对比学习(Contrastive Learning)作为自监督学习的重要分支,其核心思想可以用一句话概括:让相似样本的特征表示尽可能接近,不相似样本的特征表示尽可能远离。这种思想最早可以追溯到20…...

douyin-downloader:3大核心能力破解抖音内容高效下载难题

douyin-downloader:3大核心能力破解抖音内容高效下载难题 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...

从FamNet到通用计数:小样本学习如何让AI“数”遍万物

1. 小样本计数的革命:从专用工具到通用能力 记得我第一次接触物体计数任务时,用的还是专门针对人群计数的模型。当时为了统计商场人流量,不得不专门训练一个模型。后来遇到统计停车场的需求,又要重新收集数据训练新模型。这种&quo…...

智能农业大棚设计详解

基于单片机的智能农业大棚设计温湿度二氧化碳光照(详细设计说明 10119-基于单片机的智能农业大棚设计温湿度二氧化碳光照(详细设计说明书proteus源代码原理图元件清单) 功能需求: 智慧农业大棚的底层理念是实现智能化控制与生产&a…...

ComputeSharp未来展望:GPU计算在.NET生态中的发展路线图

ComputeSharp未来展望:GPU计算在.NET生态中的发展路线图 【免费下载链接】ComputeSharp A .NET library to run C# code in parallel on the GPU through DX12, D2D1, and dynamically generated HLSL compute and pixel shaders, with the goal of making GPU comp…...