lvgl checkbox 实现互斥
时间: 2023-05-23 22:01:40 浏览: 137
lvgl checkbox 实现互斥,可以通过给所有的 checkbox 绑定同一个回调函数,在回调函数中,对所有的 checkbox 进行遍历,判断哪些 checkbox 被选中,如果有多个被选中,则取消除最后选择的那一个以外的所有选择。同时,也可以在回调函数中对被选中的 checkbox 进行一些后续操作。下面是一个示例代码:
```c
/* 回调函数 */
static void checkbox_group_cb(lv_obj_t *checkbox, lv_event_t event)
{
if(event == LV_EVENT_VALUE_CHANGED) {
lv_obj_t *checkbox_group = lv_obj_get_parent(lv_obj_get_parent(checkbox));
/* 遍历所有 checkbox 并取消大部分的选中 */
lv_obj_t *child;
LV_LL_READ(lv_obj_get_child_ll(checkbox_group), child) {
if(lv_obj_is_checkbox(child)) {
if(child != checkbox && lv_checkbox_is_checked(child)) {
lv_checkbox_set_checked(child, false);
}
}
}
/* 后续操作 */
if(lv_checkbox_is_checked(checkbox)) {
printf("Checkbox %s is checked\n", lv_checkbox_get_text(checkbox));
} else {
printf("Checkbox %s is unchecked\n", lv_checkbox_get_text(checkbox));
}
}
}
/* 创建 checkbox */
lv_obj_t *checkbox_group = lv_cont_create(lv_scr_act(), NULL);
lv_cont_set_fit2(checkbox_group, LV_FIT_PARENT, LV_FIT_TIGHT);
lv_cont_set_style(checkbox_group, LV_CONT_STYLE_MAIN, &lv_style_transp);
lv_obj_t *checkbox1 = lv_checkbox_create(checkbox_group, NULL);
lv_checkbox_set_text(checkbox1, "Checkbox 1");
lv_obj_set_event_cb(checkbox1, checkbox_group_cb);
lv_obj_t *checkbox2 = lv_checkbox_create(checkbox_group, checkbox1);
lv_checkbox_set_text(checkbox2, "Checkbox 2");
lv_obj_set_event_cb(checkbox2, checkbox_group_cb);
lv_obj_t *checkbox3 = lv_checkbox_create(checkbox_group, checkbox2);
lv_checkbox_set_text(checkbox3, "Checkbox 3");
lv_obj_set_event_cb(checkbox3, checkbox_group_cb);
```
这样,就可以实现多个 checkbox 之间的互斥了。
阅读全文