lvgl的教程着实不多,官方的文档也不会针对所有情况提供示例代码,毕竟各人使用场景不同。lvgl中监听键盘的官方示例代码挺简单的,短短几行代码就可以实现键盘监听。但不知道是官方忽略了重要的部分还是业内人员都比较懂,所以对于监听PC键盘的处理大家都心领神会。但这可让我花了好几天时间来研究,终于才实现了监听PC键盘的所有按键事件,特此记录,分享给跟我一样的小白同学。
对于lvgl的所有事件的监听其实都是添加事件回调函数,但键盘监听需要在初始化键盘的lv_indev_t对象后使用lv_indev_set_group添加到lv_group_t对象里面。组内的控件在添加对应回调事件后进行响应。此部分代码亦如官方示例代码一样:
libinput_init();
lv_group_t *g = lv_group_create();
lv_group_set_default(g);
static lv_indev_drv_t indev_keyboard;
lv_indev_drv_init(&indev_keyboard);
indev_keyboard.type = LV_INDEV_TYPE_KEYPAD;
indev_keyboard.read_cb = libinput_read;
lv_indev_t *keyboard_indev = lv_indev_drv_register(&indev_keyboard);
lv_indev_set_group(keyboard_indev, g);
也就是初始化键盘的接口和监听程序,其中libinput_read是官方基于Linux的libinput库开发的监听键盘的事件函数。初始化完成后需要使用lv_group_add_obj将要响应键盘事件的控件添加到与键盘统一个组g中,然后为该控件添加事件处理函数。