立即注册 找回密码

微雪课堂

搜索

树莓派littlevGL系列教程:复选框控件(lv_cb)

2019-12-1 18:39| 发布者: imliubo| 查看: 6779| 评论: 0|原作者: IAMLIUBO

摘要: Hi,大家好,欢迎来到树莓派之littlevGL课堂,我们在上节课中学习了画布控件(lv_canvas),本节课带大家来学习一下复选框控件,相信大家在日常操作电子产品的时候肯定都会用到复选框,只不过大家没怎么注意而已,那么 ...
Hi,大家好,欢迎来到树莓派之littlevGL课堂,我们在上节课中学习了画布控件(lv_canvas),本节课带大家来学习一下复选框控件,相信大家在日常操作电子产品的时候肯定都会用到复选框,只不过大家没怎么注意而已,那么这里就教大家如何用复选框控件。
一 有图有真相

没错,上面效果就是复选框,就像我们在很多文件中选择某几个删除的时候的复选框一样:

虽然这是一个很小的控件,但是一个完整的用户界面正是由很多小的,单独的控件组成的,如果一个界面是一整个控件,那肯定是不可能的,所以我们要先将最基本的控件学习并掌握完成后,后面我们做东西才能不会出现不知道用啥控件的问题,所以现在你每学习的一个控件,到最后都会都是有作用的!

二 代码分析
用户可下载"圆弧对象(lv_arc)的使用"文章末尾的Demo工程(点击我直接下载),参考圆弧对象(lv_arc)的使用文章,将以下Demo代码复制到Demo工程test.c文件空白处.然后在test.c文件的create_test()函数中增加cb_test()函数测试。
static void cb_event_handler(lv_obj_t * obj, lv_event_t event)
{
    if(event == LV_EVENT_VALUE_CHANGED) {
        printf("State: %s\n", lv_cb_is_checked(obj) ? "Checked" : "Unchecked");
    }
}
void cb_test(void)
{
    lv_obj_t * cb = lv_cb_create(lv_scr_act(), NULL);
    lv_cb_set_text(cb, "I agree to terms and conditions.");
    lv_obj_align(cb, NULL, LV_ALIGN_CENTER, 0, 0);
    lv_obj_set_event_cb(cb, cb_event_handler);
}
可以看到这里的代码还是比较简单的,lv_cb_set_text函数是设置跟在复选框后面的文字的,然后我们通过lv_obj_set_event_cb函数设置一个回调函数,用来响应复选框选中后的事件触发,最后我们在回调函数中打印出了复选框的状态,我们再来看一下上面代码中没有提到的几个API:
void lv_cb_set_static_text(lv_obj_t *cb, const char *txt);
void lv_cb_set_style(lv_obj_t *cb, lv_cb_style_t type, const lv_style_t *style);
static void lv_cb_set_checked(lv_obj_t *cb, bool checked);
static void lv_cb_set_inactive(lv_obj_t *cb);
const char *lv_cb_get_text(constlv_obj_t *cb;
static bool lv_cb_is_checked(constlv_obj_t *cb);
static bool lv_cb_is_inactive(constlv_obj_t *cb);
const lv_style_t *lv_cb_get_style(constlv_obj_t *cb, lv_cb_style_t type);
复选框控件基本就上面这些API了,其实大家看名称应该也都能够知道是什么作用,那么这里给大家也做一下简单介绍:
lv_cb_set_static_text(lv_obj_t *cb, const char *txt);
也是设置文本,不过这里的文本要确保在复选框的声明周期内都要确保没有被释放掉,否则会出现意想不到的效果。
lv_cb_set_style(lv_obj_t * cb, lv_cb_style_t type, const lv_style_t * style);
设置复选框的样式,其中type参数指的是复选框的哪一个样式要被设置,也就是是背景样式,是选中的样式,还是未被选中的样式,具体参数可以看下面的枚举结构体:
/** Checkbox styles. */
enum {
    LV_CB_STYLE_BG, /**< Style of object background. */
    LV_CB_STYLE_BOX_REL, /**< Style of box (released). */
    LV_CB_STYLE_BOX_PR, /**< Style of box (pressed). */
    LV_CB_STYLE_BOX_TGL_REL, /**< Style of box (released but checked). */
    LV_CB_STYLE_BOX_TGL_PR, /**< Style of box (pressed and checked). */
    LV_CB_STYLE_BOX_INA, /**< Style of disabled box */
};
typedef uint8_t lv_cb_style_t;
lv_cb_set_checked(lv_obj_t *cb, bool checked);
设置复选框的状态,当参数checked为true是,复选框是选中状态,为false是未选中状态。
void lv_cb_set_inactive(lv_obj_t *cb);
禁用复选框,让复选框不再可以被选中,没发现有可以再次激活的API。
char *lv_cb_get_text(constlv_obj_t *cb;
获取我们设置的文本
bool lv_cb_is_checked(constlv_obj_t *cb);
查询复选的状态,返回未true是已被选中,false是未选中。
bool lv_cb_is_inactive(constlv_obj_t *cb);
查询是否被禁用,返回未true是已被禁用,false是未禁用。
lv_style_t *lv_cb_get_style(constlv_obj_t *cb, lv_cb_style_t type);
查询样式,同样的type参数与上面设置样式的时候参数是一样的。

OK,本节课程就到这里,大家有没有觉得很简单呢?我们下一节课来学习图表控件(lv_chart),那我们下节课再见!

293

顶一下

刚表态过的朋友 (293 人)

相关阅读

最新评论

Arduino
基础入门
OpenCV
littleGL

微雪官网|产品资料|手机版|小黑屋|微雪课堂. ( 粤ICP备05067009号 )

GMT+8, 2024-11-22 12:10 , Processed in 0.023558 second(s), 18 queries .

返回顶部