事件

当LVGL发生某些用户可能感兴趣的事件时,系统做出相应的响应。实际上根据具体情况调用相应的回调函数。STM32的中断也可看成是一种事件

LVGL中的事件包括以下几类:

  • 输入设备事件(Input device events):对象被按下、滚动、聚焦….

  • 绘图事件(Drawing events)

  • 其他事件(Special events):对象被删除、样式等被更改…..

  • 特殊事件(Other events):对象的值被更改(滑块移动)、一个过程完成

  • 自定义事件(Custom events)

具体的看官方文档

1.给对象添加事件

1
2
3
4
5
6
7
static void my_event_cb(lv_event_t * event)
{
printf("Clicked\n");
}

lv_obj_t * btn = lv_btn_creae(lv_scr_act());
lv_obj_add_event_cb(btn, my_event_cb, LV_EVENT_CLICKED, NULL); /*Assign an event callback*/
  • 在示例中 LV_EVENT_CLICKED 意味着只有当对象发生点击事件时,就会触发事件从而进入事件处理回调函数 my_event_cb

2.回调函数写法

回调函数必须声明/定义成void fun(lv_event_t* envent)这样的

lv_event_t 是传递给事件回调的唯一参数,它包含有关事件的所有数据。可以从中获得以下值:

  • lv_event_get_code(e) 获取触发的事件代码

  • lv_event_get_target(e) 获取触发事件的对象

  • lv_event_get_original_target(e) 获取事件最初发送到的对象(与 lv_event_get_target 不同,如果 event bubbling 被启用)

  • lv_event_get_user_data(e) 获取作为 lv_obj_add_event_cb 的最后一个参数传递的指针。

  • lv_event_get_param(e) 获取作为 lv_event_send 的最后一个参数传递的参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void btn_event_cb(lv_event_t* envent)
{
lv_obj_t* obj = lv_event_get_target(envent);//获取触发事件的对象
if (obj == btn)
{
lv_obj_del(obj1);//子对象同时都会被删
//lv_obj_clean(obj1);//只处理子对象
cout << "The button has benn delete!" << endl;
}
}


void scr_cb(lv_event_t* event)
{
if (lv_event_get_code(event) == LV_EVENT_GESTURE)
{
lv_dir_t dir = lv_indev_get_gesture_dir(lv_indev_get_act());
printf("Dir: %d\n", dir);
}
}

3.事件的删除

可以使用 lv_obj_remove_event_cb(obj, event_cb) 或 lv_obj_remove_event_dsc(obj, event_dsc) 从对象中删除事件。

 event_dsc 是一个由 lv_obj_add_event_cb 返回的指针。