LVGL事件传播与处理:从一次诡异的按钮失灵说起去年做一款工业触控面板,遇到个让人抓狂的bug:一个按钮在屏幕左上角怎么点都没反应,但同样的代码复制到右下角就正常。排查了三天,最后发现是事件传播机制在作祟——按钮的父容器注册了点击事件,把子控件的事件给“截胡”了。今天就把LVGL事件传播的坑和正确玩法掰开揉碎讲清楚。事件传播的“三叉戟”路径LVGL的事件传播不像浏览器DOM那样冒泡到底,它走的是对象树+事件类型的双重路由。每个事件从触发点出发,沿着三个方向扩散:直接目标:事件首先到达触发事件的控件本身(比如你点了个按钮)向上冒泡:沿着父容器链向上传播,直到根对象(lv_scr_act())平行捕获:如果事件类型允许,还会触发同层级其他控件的相同事件(这个特性容易忽略)关键区别在于:LVGL默认不冒泡。你没看错,默认情况下事件只停留在触发控件上。要开启冒泡,必须在事件处理函数里显式调用lv_event_stop_bubbling()的反向操作——实际上是通过注册事件时设置LV_EVENT_ALL或特定标志位来控制。事件注册的“暗坑”清单坑1:事件优先级陷阱