[LVGL] 可点击的文字label

news2024/12/25 12:14:44

LVGL8.x 自带的label 是没有点击响应的功能,即使加了lv_obj_add_event_cb 也不起作用,为了解决这个问题,我们使用了按钮控件去模拟纯label的效果;有了这个demo用户就可以实现类似超链接 点击一个文字就跳转到某个页面的功能。

static void tp_event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    uint8_t* btn_id = e->user_data;
   
    if(code == LV_EVENT_CLICKED) {
        printf("[Click] btn_id = %d \n",*btn_id);
    }
    else if(code == LV_EVENT_VALUE_CHANGED) {
        printf("[Toggle] btn_id = %d \n",*btn_id);
    }
}

typedef struct
{
    uint8_t txt_id;
    int x;
    int y;
    char* txt_str;       
    void(*event_handler)(lv_event_t* e);
    lv_obj_t* self_obj;

} QUI_TXT;

#define NUM_OBJ  (5)
static QUI_TXT lqui_txt[NUM_OBJ]=
{
    {0,50,30,"China",tp_event_handler,NULL},
    {1,50,60,"England",tp_event_handler,NULL},
    {2,50,90,"Brazil",tp_event_handler,NULL},
    {3,50,120,"Mexico",tp_event_handler,NULL},
    {4,50,150,"Egypt",tp_event_handler,NULL},
};

static int create_tp_txt(lv_obj_t* parent_obj,QUI_TXT* qTxt)
{
    lv_obj_t* btn = lv_btn_create(parent_obj);
    if (btn==NULL)
    {
        return 0;
    }
    lv_obj_set_style_bg_opa(btn, 0, 0);
    lv_obj_set_style_shadow_opa(btn, 0, 0); 
    lv_obj_set_style_text_color(btn, lv_color_hex(0x000000), 0);
    lv_obj_set_pos(btn, qTxt->x,qTxt->y);

    lv_obj_t* label = lv_label_create(btn);  
    if (qTxt->txt_str)
    {
        lv_label_set_text(label,qTxt->txt_str);
    }
    if (qTxt->event_handler != NULL)
    {
        lv_obj_add_event_cb(btn, qTxt->event_handler, LV_EVENT_ALL, (void*)&qTxt->txt_id);
    }
    qTxt->self_obj = btn;
    return 1;
}


void lv_example_tp_text(void)
{
    lv_obj_t* parent_obj = lv_scr_act();
    for(int i=0;i< NUM_OBJ;i++)
        create_tp_txt(parent_obj, &lqui_txt[i]);

    lv_obj_add_flag(lqui_txt[0].self_obj,LV_OBJ_FLAG_CHECKABLE);//按钮1做特殊效果

    lv_timer_handler(); 
    return;
}

demo里面 点击不同的文字,日志会输出不同的txt_id 。

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

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

相关文章

Kotlin 教程(环境搭建)

Kotlin IntelliJ IDEA环境搭建 IntelliJ IDEA 免费的社区版下载地址&#xff1a;Download IntelliJ IDEA – The Leading Java and Kotlin IDE 下载安装后&#xff0c;我们就可以使用该工具来创建项目&#xff0c;创建过程需要选择 SDK&#xff0c; Kotlin 与 JDK 1.6 一起使…

【大数据】详解 Flink 中的 WaterMark

详解 Flink 中的 WaterMark 1.基础概念1.1 流处理1.2 乱序1.3 窗口及其生命周期1.4 Keyed vs Non-Keyed1.5 Flink 中的时间 2.Watermark2.1 案例一2.2 案例二2.3 如何设置最大乱序时间2.4 延迟数据重定向 3.在 DDL 中的定义3.1 事件时间3.2 处理时间 1.基础概念 1.1 流处理 流…

1.【Vue3】前端开发引入、Vue 简介

1. 前端开发引入 1.1 前端开发前置知识 通过之前的学习&#xff0c;已经通过 SpringBoot 和一些三方技术完成了大事件项目的后端开发。接下来开始学习大事件项目的前端开发&#xff0c;前端部分借助两个框架实现&#xff1a; Vue3&#xff08;一个 JS 框架&#xff09;基于 …

Vue-Router: 如何使用路由元信息来管理路由?

Vue-Router是Vue.js官方的路由管理器&#xff0c;它可以帮助我们快速构建单页应用程序&#xff08;SPA&#xff09;。除了常见的路由功能外&#xff0c;Vue-Router还支持使用路由元信息来管理和控制路由。路由元信息是可以附加到路由上的自定义属性&#xff0c;它可以帮助我们实…

LandrayOA内存调优 / JAVA内存调优 / Tomcat web.xml 超时时间调优实战

目录 一、背景说明 二、LandrayOA / Tomcat 内存调优 2.1 \win64\tomcat\conf\web.xml 文件调优 2.2 \win64\tomcat\bin\catalina64.bat 文件调优 一、背景说明 随着系统的使用时间越来越长&#xff0c;数据量越多&#xff0c;发现系统的有些功能越来越慢&…

在腾讯云上部署幻兽帕鲁,实现游戏自由!

在帕鲁的世界&#xff0c;你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活&#xff0c;也可以为你在工厂工作。你也可以将它们进行售卖&#xff0c;或肢解后食用。引用自&#xf…

第17章_反射机制(理解Class类并获取Class实例,类的加载与ClassLoader的理解,反射的基本应用,读取注解信息,体会反射的动态性)

文章目录 第17章_反射机制本章专题与脉络1. 反射(Reflection)的概念1.1 反射的出现背景1.2 反射概述1.3 Java反射机制研究及应用1.4 反射相关的主要API1.5 反射的优缺点 2. 理解Class类并获取Class实例2.1 理解Class2.1.1 理论上2.1.2 内存结构上 2.2 获取Class类的实例(四种方…

Linux系统优化要义

这里不敢说 linux优化奥义&#xff0c;主要是本文比较浅显&#xff0c;适合普通开发相关人员去读 linux作为服务器系统的王者&#xff0c;以稳定性著称&#xff0c;但对于不同的“应用场景”&#xff0c;相关配置还需调整&#xff0c;才能保证业务稳定性。以下是相关总结 IO优…

函数入门.

函数入门 1. 初识函数2. 函数的参数2.1 参数2.2 默认参数2.3 动态参数 3. 函数返回值总结作业 1. 初识函数 函数到底是个什么东西&#xff1f; 函数&#xff0c;可以当做是一大堆功能代码的集合。 def 函数名():函数内编写代码......函数名()例如&#xff1a; # 定义名字叫in…

Linux 驱动开发基础知识—— 具体单板的 LED 驱动程序(五)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

THM学习笔记——john

John the Ripper是目前最好的哈希破解工具之一。 John基本语法&#xff1a; john [options] [path to file] john&#xff1a;调用John the Ripper程序。 [path to file]&#xff1a;包含你要尝试破解的哈希的文件&#xff0c;如果它们在同一个目录中&#xff0c;你就不需要命名…

S275 4G网络IO模块:智能酒店的理想选择

行业背景 随着物联网技术的发展&#xff0c;酒店服务也变得更加“智能”——自动灯光效果、室内温湿度控制、各种人性化操作等贴心服务&#xff0c;带给顾客真正的宾至如归之感。 同时&#xff0c;智慧酒店更为管理者提供了高效的管理手段&#xff0c;将酒店物耗、能耗、人员…

CSS探索浏览器兼容性

学习如何探索浏览器的兼容性对于编写跨浏览器兼容的CSS代码非常重要。以下是一些学习CSS兼容性的方法&#xff1a; MDN文档&#xff1a;Mozilla开发者网络&#xff08;MDN&#xff09;提供了广泛而详细的CSS文档&#xff0c;其中包含有关CSS属性、选择器和功能的信息。在MDN上…

解决 PDF.js v2.3.200 (build: 4ae3f9fc) 信息:PDFDocument: Stream must have data

文章标题 问题描述&#xff1a;思考分析&#xff1a;解决方案&#xff1a;参考资料 问题描述&#xff1a; 项目中使用PDF.js去预览已上传的附件文件时&#xff0c;加载PDF文件的时候报了以下的错误 错误信息如下 PDF.js v2.3.200 (build: 4ae3f9fc) 信息&#xff1a;PDFDocu…

基于QC-LDPC编码的循环移位网络的FPGA实现

一、桶式移位寄存器(barrel shifter) 八位桶式移位寄存器的VHDL实现如下&#xff0c;由于每一层结构相似&#xff0c;于是采用生成语句for_generate实现&#xff0c;使用该代码实现的RTL级分析和理论的结构一致&#xff0c;仿真结果也符合预期。 entity barrel_shift isGENE…

降低文件增长和失真的零系数JPEG图像可逆信息隐藏

一、研究概述和意义 随着多媒体技术和网络的迅猛发展&#xff0c;数字媒体的应用越来越广泛。在网络上传输的数字 媒体如音频、文本、视频和图像的内容及数据安全问题也随之而来。伴随着计算机技术发展与普及&#xff0c;数字媒体的机密性、完整性经常受到非法活动的威胁&…

OJ_完数和盈数

题干 c实现 #include<stdio.h> #include<vector> using namespace std;int IsWanOrYing(int a) {int sum 1;for (int i 2; i < a; i) {if (a % i 0) {sum i;}}if (sum a) {return 1;}else if (sum > a) {return 2;}return -1; }int main() {vector<…

DjangoURL调度器(二)

一、默认值与额外参数 1.1、默认值 1.1.1、urls.py from django.urls import pathfrom . import viewsurlpatterns [# http://127.0.0.1:8000/polls/blog/ 等同于 # http://127.0.0.1:8000/polls/blog/1/path(blog/, views.page),# http://127.0.0.1:8000/polls/blo…

【鸿蒙】大模型对话应用(二):对话界面设计与实现

Demo介绍 本demo对接阿里云和百度的大模型API&#xff0c;实现一个简单的对话应用。 DecEco Studio版本&#xff1a;DevEco Studio 3.1.1 Release HarmonyOS SDK版本&#xff1a;API9 关键点&#xff1a;ArkTS、ArkUI、UIAbility、网络http请求、列表布局、层叠布局 对话页…

Java笔记 --- 一、双列集合

一、双列集合 双列集合的特点 Map 创建Map对象时&#xff0c;要规定键和值的泛型 Map是一个接口&#xff0c;不能直接创建&#xff0c;要创建实例化对象 Map的遍历 通过键找值 先获取到键的对象&#xff0c;并放到一个单列集合中&#xff08;map.KeySet()方法&#xff09;…