最近看到lvgl更新到了v8版本,V8版本和之前的V7版本有了不少的变化,现在开始继续学习一下,
今天主要学习Button的使用,还是通过codeblock来模拟代码的运行,下面上代码
建议:所有的lv_obj创建完成都添加一个判空
static void btn_event_callback(lv_event_t* event)
{
static uint32_t counter = 1;
lv_obj_t* btn = lv_event_get_target(event); //获取事件对象
if (btn != NULL)
{
lv_obj_t* label = lv_obj_get_child(btn, 0); // 获取第一个子对象
if (label != NULL)
{
lv_label_set_text_fmt(label, "%d", counter); //设置显示内容
counter++;
}
}
}
void lv_button_click_event_test()
{
lv_obj_t* btn = lv_btn_create(lv_scr_act()); // 创建Button对象
if (btn != NULL)
{
lv_obj_set_size(btn, 100, 50); // 设置对象大小,宽度和高度
lv_obj_set_pos(btn, 300, 200);; // 设置按钮位置,即X和Y坐标
lv_obj_add_event_cb(btn, btn_event_callback, LV_EVENT_CLICKED, NULL); // 给对象添加CLICK事件和事件处理回调函数
lv_obj_t* label = lv_label_create(btn); // 基于Button对象创建Label对象
if (label != NULL)
{
lv_label_set_text(label, "Click me!"); // 设置显示内容
lv_obj_center(label); // 对象居中显示
}
}
}
上面的代码的回调函数中,我们看到使用的是lv_obj_get_child获取btn对象的第一个子对象来获取label对象的,当然我们也可以使用下面的方式来获取,即使用事件的user_data
static void btn_event_callback1(lv_event_t* event)
{
static uint32_t counter = 1;
lv_obj_t* btn = lv_event_get_target(event); //获取事件对象
if (btn != NULL)
{
lv_obj_t* label = (lv_obj_t* )lv_event_get_user_data(event); // 获取当前事件的user_data
if (label != NULL)
{
lv_label_set_text_fmt(label, "%d", counter); //设置显示内容
counter++;
}
}
}
void lv_button_click_event_test1()
{
lv_obj_t* btn = lv_btn_create(lv_scr_act()); // 创建Button对象
if (btn != NULL)
{
lv_obj_set_size(btn, 100, 50); // 设置对象大小,宽度和高度
lv_obj_set_pos(btn, 300, 200);; // 设置按钮位置,即X和Y坐标
lv_obj_t* label = lv_label_create(btn); // 基于Button对象创建Label对象
if (label != NULL)
{
lv_label_set_text(label, "Click me!"); // 设置显示内容
lv_obj_center(label); // 对象居中显示
lv_obj_add_event_cb(btn, btn_event_callback1, LV_EVENT_CLICKED, (void *)label); // 给对象添加CLICK事件和事件处理回调函数,使用label作为user_data
}
}
}
效果如下: