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

LVGL学习笔记18 - 表Table

目录

1. Parts

1.1 LV_PART_MAIN

1.2 LV_PART_ITEMS

2. 样式

2.1 设置行列数

2.2 设置单元格字符串

 2.3  设置单元格宽度

2.4 设置表格高度和宽度

2.5 设置字符串颜色

2.6 设置边框颜色

2.7 设置背景颜色

3. 事件

4. CELL CTRL


表格是由包含文本的行、列和单元格构建的。它不是真实的对象,只是临时绘制的。

表格通过lv_table_create创建。

lv_obj_t* obj1 = lv_table_create(lv_scr_act());

1. Parts

表格主要有2个Parts:LV_PART_MAIN和LV_PART_ITEMS。

1.1 LV_PART_MAIN

对应表格的背景。

1.2 LV_PART_ITEMS

对应表格的单元格,包括背景样式属性和文本属性。

2. 样式

2.1 设置行列数

通过lv_table_set_row_cnt和lv_table_set_col_cnt设置行列数。

lv_table_set_row_cnt(obj1, 5);
lv_table_set_col_cnt(obj1, 2);

2.2 设置单元格字符串

通过lv_table_set_cell_value或lv_table_set_cell_value_fmt设置。

lv_table_set_cell_value(obj1, 0, 0, "Item1");
lv_table_set_cell_value_fmt(obj1, 0, 1, "0x%x", 1);

 2.3  设置单元格宽度

通过lv_table_set_col_width设置,高度不需要设置,会根据单元格样式(字体、填充等)和行数自动计算的。

lv_table_set_col_width(obj1, 1, 100);

2.4 设置表格高度和宽度

通过lv_obj_set_height和lv_obj_set_width或设置表格的整体高度和宽度,当大小小于实际大小时,表格会出现滚动属性。

lv_obj_set_size(obj1, 200, 200);

如果参数不是具体的数字,而是LV_SIZE_CONTENT,则大小随内容大小设置。

2.5 设置字符串颜色

lv_obj_set_style_text_color(obj1, lv_color_hex(0xFF0000), LV_PART_ITEMS);

 

注意,PARTS对应的是LV_PART_ITEMS,而且并没有影响到单元格选中时的显示。如果要改变选中时的颜色,则需要加上状态LV_STATE_FOCUS_KEY

lv_obj_set_style_text_color(obj1, lv_color_hex(0xFF0000), LV_PART_ITEMS | LV_STATE_FOCUS_KEY);

 

2.6 设置边框颜色

lv_obj_set_style_border_color(obj1, lv_color_make(252, 144, 181), LV_PART_MAIN);

注意外面一圈蓝色实际是选中的框,不是表格本体的边框。

如果要设置内部格的框,可以通过对象的Style修改:

lv_obj_set_style_outline_width(obj1, 2, LV_PART_ITEMS);

2.7 设置背景颜色

和字符串颜色类似,LV_PART_ITEMS对应整个背景,而LV_PART_ITEMS | LV_STATE_FOCUS_KEY对应选中时的背景颜色。

lv_obj_set_style_bg_color(obj1, lv_color_make(252, 144, 181), LV_PART_ITEMS);

lv_obj_set_style_bg_color(obj1, lv_color_make(252, 144, 181), LV_PART_ITEMS | LV_STATE_FOCUS_KEY);

3. 事件

一般可以通过事件LV_EVENT_DRAW_PART_BEGIN和LV_EVENT_DRAW_PART_END重绘来实现特别的显示。

通过lv_obj_add_event_cb添加事件回调函数,例如LV_EVENT_DRAW_PART_BEGIN事件的添加方式:

lv_obj_add_event_cb(obj1, table_event_begin_cb, LV_EVENT_DRAW_PART_BEGIN, NULL);

回调函数原型如下:

static void table_event_begin_cb(lv_event_t* e)

这里有一个重要的指针变量:lv_obj_draw_part_dsc_t

lv_obj_draw_part_dsc_t* dsc = (lv_obj_draw_part_dsc_t*)lv_event_get_param(e);

 通过其成员变量part是否LV_PART_ITEMS

if (dsc->part == LV_PART_ITEMS)
{
}

成员变量id的含义是:当前行 × 列数 + 当前列,所以要得到行数和列数的方式:

uint32_t row = dsc->id / lv_table_get_col_cnt(obj);
uint32_t col = dsc->id - row * lv_table_get_col_cnt(obj);

成员变量label_dsc对应字符串显示,例如将字符串居中显示:

if (row == 0)
{dsc->label_dsc->align = LV_TEXT_ALIGN_CENTER;
}

同理,成员变量rect_dsc对应背景的方框。其他则是空指针,即无意义。可以通过VS查看变量了解具体的定义。

4. CELL CTRL

即对单元格添加控制,定义的控制位有:

enum {LV_TABLE_CELL_CTRL_MERGE_RIGHT = 1 << 0,LV_TABLE_CELL_CTRL_TEXT_CROP   = 1 << 1,LV_TABLE_CELL_CTRL_CUSTOM_1    = 1 << 4,LV_TABLE_CELL_CTRL_CUSTOM_2    = 1 << 5,LV_TABLE_CELL_CTRL_CUSTOM_3    = 1 << 6,LV_TABLE_CELL_CTRL_CUSTOM_4    = 1 << 7,
};

这些位可以通过OR的方式组合控制位。前面2个是系统定义好的CTRL,其他4个是自定义CTRL。

获取选中CELL的行列:

lv_obj_t* obj = lv_event_get_target(e);
uint16_t col;
uint16_t row;
lv_table_get_selected_cell(obj, &row, &col);

通过lv_table_has_cell_ctrl获取列表单元格是否有发生CTRL,通过lv_table_add_cell_ctrl和lv_table_clear_cell_ctrl设置是否产生CTRL。

chk = lv_table_has_cell_ctrl(obj, row, col, LV_TABLE_CELL_CTRL_MERGE_RIGHT);
if (chk == true)
{lv_table_clear_cell_ctrl(obj, row, col, LV_TABLE_CELL_CTRL_MERGE_RIGHT);
}
else
{lv_table_add_cell_ctrl(obj, row, col, LV_TABLE_CELL_CTRL_MERGE_RIGHT);
}

LV_TABLE_CELL_CTRL_TEXT_CROP按字面意思是指裁剪字符串,但是没有试出来效果。

相关文章:

LVGL学习笔记18 - 表Table

目录 1. Parts 1.1 LV_PART_MAIN 1.2 LV_PART_ITEMS 2. 样式 2.1 设置行列数 2.2 设置单元格字符串 2.3 设置单元格宽度 2.4 设置表格高度和宽度 2.5 设置字符串颜色 2.6 设置边框颜色 2.7 设置背景颜色 3. 事件 4. CELL CTRL 表格是由包含文本的行、列和单元格构…...

嵌入式安防监控项目——html框架分析和环境信息刷新到网页

目录 一、html控制LED 二、模拟数据上传到html 一、html控制LED 简单来说就是html给boa服务器发了一个控制指令信息&#xff0c;然后boa转发给cgi进程&#xff0c;cgi通过消息队列和主进程通信。主进程再去启动LED子线程。 这是老师给的工程。 以前学32都有这工具那工具来管…...

centos安装docker详细步骤

目录 一.前言 1.环境要求2.官网中文安装参考手册 二.安装步骤 1.卸载旧版本2.安装需要的软件包3.设置docker镜像源 1.配置docker镜像源 方式1&#xff1a;官网地址(外国)&#xff1a;方式2&#xff1a;阿里云源&#xff1a;2.查看配置是否成功 4.更新yum软件包索引5.可以查看…...

初识HTML、W3C标准、如何利用IDEA创建HTML项目、HTML基本结构、网页基本信息

一、什么是HTML&#xff1f; HTML——Hyper Text Markup Languagr&#xff08;超文本标记语言&#xff09; 超文本包括&#xff1a;文字、图片、音频、视频、动画等 目前网页中常用——HTML5 HTML5提供了一些新的元素和一些有趣的新特性&#xff0c;同时也建立了一些新的规则…...

为什么程序员喜欢这些键盘?

文章目录程序员的爱介绍个人体验程序员的爱 程序员是长时间使用计算机的群体&#xff0c;他们需要一款高品质的键盘来保证舒适的打字体验和提高工作效率。在键盘市场上&#xff0c;有很多不同类型的键盘&#xff0c;但是对于程序员来说&#xff0c;机械键盘是他们最钟爱的选择…...

JS中数组去重的几种方法

JS 中有多种方法可以实现数组去重&#xff0c;下面是几种常用的方法&#xff1a;1、使用 Set 去重&#xff1a;Set 数据结构中不能有重复元素&#xff0c;可以将数组转成 Set 类型&#xff0c;再转回数组。let arr [1,2,3,4,5,6,2,3,4]; let uniqueArr [...new Set(arr)]; co…...

Nginx 配置实例-负载均衡

一、实现效果 浏览器地址栏输入地址 http://192.168.137.129/edu/a.html&#xff0c;负载均衡效果&#xff0c;将请求平均分配到8080和8081两台服务器上。 二、准备工作 1. 准备两台tomcat服务器&#xff0c;一台8080&#xff0c;一台8081 (具体操作如下两个链接) Nginx配置实…...

引出生命周期、生命周期_挂载流程、生命周期_更新流程、生命周期_销毁流程、生命周期_总结——Vue

目录 一、引出生命周期 二、生命周期_挂载流程 三、生命周期_更新流程 四、生命周期_销毁流程 五、生命周期_总结 一、引出生命周期 生命周期&#xff1a; 1.又名&#xff1a;生命周期回调函数、生命周期函数、生命周期钩子。 2.是什么&#xff1a;Vue在关键时刻帮我们调…...

C++ STL学习之【vector的使用】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f38a;每篇一句&#xff1a; 图片来源 The power of imagination makes us infinite. 想象力的力量使我们无限。 文章目录&#x1f4d8;前言&#x1f4d8;正文1、默认成员函数1.1、默认构造…...

方差分析与单因素方差分析

研究分类型自变量对数值型因变量的影响。检验统计的设定和检验方法与变量间的方差是否相等有关。 例如研究行业、服务等级对投诉数的影响&#xff1a;如表格中给出4个行业、每个行业有3个服务等级、样本容量为7、观测值为投诉数。则构成一个3维的矩阵。 在上述基础上&#xf…...

分布式链路追踪组件skywalking介绍

SkyWalking组件概念 一个开源的可观测平台, 用于从服务和云原生基础设施收集, 分析, 聚合及可视化数据。SkyWalking 提供了一种简便的方式来清晰地观测分布式系统, 甚至横跨多个云平台。SkyWalking 更是一个现代化的应用程序性能监控(Application Performance Monitoring)系统…...

SUBMIT的用法

SUBMIT的用法 一、简介 系统MB52/MB51/MB5B等类似的报表 &#xff0c;虽然数据很全面&#xff0c;执行效率也够快&#xff0c;但是经常会不满足用户需求&#xff08;增添字段、添加查询条件等&#xff09;&#xff0c;很多ABAP 会选择去COPY出标准程序&#xff0c;然后去做修改…...

网页基本标签、图像标签、链接标签、块内元素和块元素、列表标签、表格标签

一、网页基本标签 标题标签 段落标签 未写段落标签前&#xff0c;文本没有按照想要的格式排列显示 写段落标签后&#xff1a; 每句都是一段&#xff0c;所以句与句距离比较宽 换行标签 同一段&#xff0c;只是把文字换行&#xff0c;所以比较紧凑 水平线标签 字体样式标签 …...

RxJava操作符变换过程

要使用Rxjava首先要导入两个包&#xff0c;其中rxandroid是rxjava在android中的扩展 implementation io.reactivex:rxandroid:1.2.1implementation io.reactivex:rxjava:1.2.0我们在使用rxjava的操作符时都觉得很方便&#xff0c;但是rxjava是怎么实现操作符的转换呢&#xff0…...

开放平台订单接口

custom-自定义API操作 ​ ​​注册开通​​ taobao.custom 公共参数 名称 类型 必须 描述 key String 是 调用key&#xff08;必须以GET方式拼接在URL中&#xff09; secret String 是 调用密钥 api_name String 是 API接口名称&#xff08;包括在请求地址中&a…...

CDN相关知识点

1、什么是CDN&#xff1f;CDN的作用是什么&#xff1f; CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;是一种通过在多个节点上分布内容以提高网络性能、可靠性和可扩展性的网络解决方案。CDN通过在不同的地理位置部署服务器&#xff0c;使用户…...

【论文阅读】注意力机制与二维 TSP 问题

前置知识 注意力机制 见 这篇 二维 TSP 问题 给定二维平面上 nnn 个点的坐标 S{xi}i1nS\{x_i\}_{i1}^nS{xi​}i1n​&#xff0c;其中 xi∈[0,1]2x_i\in [0,1]^2xi​∈[0,1]2&#xff0c;要找到一个 1∼n1\sim n1∼n 的排列 π\piπ &#xff0c;使得目标函数 L(π∣s)∥xπ…...

[深入理解SSD系列 闪存实战2.1.7] NAND FLASH基本编程(写)操作及原理_NAND FLASH Program Operation 源码实现

前言 上面是我使用的NAND FLASH的硬件原理图,面对这些引脚,很难明白他们是什么含义, 下面先来个热身: 问1. 原理图上NAND FLASH只有数据线,怎么传输地址? 答1.在DATA0~DATA7上既传输数据,又传输地址 当ALE为高电平时传输的是地址, 问2. 从N...

PMP项目管理项目资源管理

目录1 项目资源管理概述2 规划资源管理3 估算活动资源4 获取资源5 建设团队6 管理团队7 控制资源1 项目资源管理概述 项目资源管理包括识别、获取和管理所需资源以成功完成项目的各个过程&#xff0c;这些过程有助于确保项目经理和项目团队在正确的时间和地点使用正确的资源。…...

程序的编译和链接

程序的编译和链接程序的编译和链接程序的两种环境翻译环境详解编译和链接预处理编译汇编链接运行环境程序的编译和链接 程序的两种环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。 第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。 …...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...