LVGL学习笔记18 - 表Table

news2024/12/24 0:35:24

目录

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按字面意思是指裁剪字符串,但是没有试出来效果。

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

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

相关文章

【Git】Git仓库初始化

Git本地仓库初始化 1.将本地代码上传至远程新建仓库 1.1.建立远程仓库 1.2.初始化本地代码仓库 第一步&#xff1a;进入本地代码目录 cd /代码路径 第二步&#xff1a;初始化仓库(执行如下命令) git init 第三步&#xff1a;将本地全部文件添加到本地缓冲区(执行如下命令)…

循环神经网络原理及实现(二):循环神经网络复现

专栏&#xff1a;神经网络复现目录 循环神经网络 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种神经网络结构&#xff0c;其主要特点是网络中存在循环连接&#xff0c;使得网络具有记忆功能&#xff0c;可以处理序列数据。在传统神经网…

autoxjs

文章目录autojs一、工具二、使用步骤1.手机设置开发模式并打开usb调试2.安装scrcpy3. 安装autoxjs4. vscode插件使用auto 入门语法总结autojs autojs 目前作者已经跑路了&#xff0c;转为用社区的autoxjs&#xff0c;官网地址&#xff1a;http://doc.autoxjs.com/#/ 一、工具 …

Echart的使用初体验,Echarts的基本使用及语法格式,简单图表绘制和使用及图例添加【学习笔记】

Echart&#xff1f; ECharts 是一个使用 JavaScript 实现的开源可视化库&#xff0c;涵盖各行业图表&#xff0c;满足各种需求。 ECharts 遵循 Apache-2.0 开源协议&#xff0c;免费商用。 ECharts 兼容当前绝大部分浏览器&#xff08;IE8/9/10/11&#xff0c;Chrome&#xf…

【打造家庭服务器系列01】无桌面版Ubuntu 22.04 连接wifi

一、背景 最近有一台笔记本一直放在哪没用了&#xff0c;就想着拿来做个服务器用吧。 如何安装Ubuntu系统&#xff0c;大家可以百度搜索一下很多。 主要分三步&#xff1a; 制作U盘启动盘&#xff08;推荐使用rufus工具&#xff0c;轻量方便&#xff09;设置BIOS引导 &#x…

java——代理

什么是代理&#xff1a; 给目标对象一个代理对象&#xff0c;由代理对象控制着对目标对象的引用 为什么使用代理&#xff1a; ①&#xff1a;功能增强&#xff1a;通过代理业务对原有业务进行增强 ②&#xff1a;用户只能同行过代理对象间接访问目标对象&#xff0c;防止用…

About What Is a DBA?

1.Evaluating a DBA Job Offer Here are some useful questions to ask: • Does the company offer regular training for its DBAs to learn new DBMS features and functionality? What about training for related technologies such as programming, networking, e-bus…

[NIPS 2017] Improved Training of Wasserstein GANs (WGAN-GP)

Contents IntroductionDifficulties with weight constraintsCapacity underuseExploding and vanishing gradientsGradient penaltyReferencesIntroduction WGAN 增加了 GAN 模型训练的稳定性,但有时仍然会有生成质量不高或难以收敛的问题。作者发现上述问题经常是由 WGAN 中…

保障信息安全:使用PyZbar库识别二维码图片可以快速获取二维码中的信息,保障信息安全。

目录 简介&#xff1a; 源代码&#xff1a; 源代码说明&#xff1a; 效果如下所示&#xff1a; 简介&#xff1a; 不用摄像头识别二维码可以应用在以下场景&#xff1a; 批量处理二维码图片&#xff1a;可以在服务器上使用PyZbar等库来批量处理二维码图片&#xff0c;例如读…

Nginx 配置实例-负载均衡

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

亚信科技新“三驾马车”再创佳绩,与数字经济同频共振

‍数据智能产业创新服务媒体——聚焦数智 改变商业近日&#xff0c;亚信科技公布了2022年财报。财报显示&#xff0c;2022年&#xff0c;亚信科技实现营收77.38亿元&#xff0c;同比上升12.2%&#xff1b;毛利润29.39亿元&#xff0c;同比上升11.1%&#xff0c;毛利率达38.0%&…

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

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

通过Session共享数据验证码进行用户登录

通过Session共享数据验证码进行用户登录 需求&#xff1a; 访问带有验证码的登录页面login.jsp。用户输入用户名&#xff0c;密码以及验证码。 ①。如果用户名和密码输入有误&#xff0c;跳转登陆页面&#xff0c;提示&#xff1a;用户名或密码错误。 ②。如果验证码输入有误…

核方法(kernel Method)

核方法 核方法定义 一种能够将在原始数据空间中的非线性数据映射到高维线性可分的方法。 核方法的用处 1、低维数据非线性&#xff0c;当其映射到高维空间&#xff08;feature space&#xff09;时&#xff0c;可以用线性方法对数据进行处理。 2、线性学习器相对于非线性学…

从MySQL innoDB的特性Doublewrite buffer谈起

文章目录前言什么是Doublewrite buffer为什么要叫它Doublewrite呢&#xff0c;双写分别是哪两次写&#xff0c;体现在了什么地方呢为什么需要Doublewrite bufferDoublewrite buffer的具体使用1.假如还没有进行第一次写的时候crash了&#xff0c;也就是Doublewrite buffer和磁盘…

最大值池化与均值池化比较分析

1 问题在深度学习的卷积网络过程中&#xff0c;神经网络有卷积层&#xff0c;池化层&#xff0c;全连接层。而池化层有最大值池化和均值池化两种情况&#xff0c;而我们组就在思考&#xff0c;最大值池化和均值池化有什么区别呢&#xff1f;两者的模型准确率是否有所不同&#…

RTP载荷H264(实战细节)

RTP包由两部分组成&#xff0c;RTP头和RTP载荷&#xff1a; RTP头 RTP头的 结构如下&#xff1a; 代码结构&#xff1a; typedef struct RtpHdr {uint8_t cc : 4, // CSRC countx : 1, // header extendp : 1, // padding flagversion : 2; // versionuint8_t …

【Oracle 19c】解决 Oracle EM(Enterprise Manager) Express 切换回旧版后无法访问的问题

文章目录问题描述解决方案解决过程1、按 Oracle EM Express 提示下载 Adobe Flash Player PPAPI 版1、按 F12 查看 HTTP 请求头2、找到问题后使用其他浏览器尝试问题描述 由于从 Oracle Database 19c 开始&#xff0c;Oracle EM(Enterprise Manager) Express&#xff08;Oracl…

【论文阅读】注意力机制与二维 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π…

2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛) A — E

2023年中国高校计算机大赛-团队程序设计天梯赛&#xff08;GPLT&#xff09;上海理工大学校内选拔赛&#xff08;同步赛) 文章目录A -- A Xor B Problem题目分析codeB -- 吃苹果题目分析codeC -- n皇后问题题目分析codeD -- 分苹果题目分析codeE -- 完型填空题目分析codeA – A…