10. 复选框部件
一、复选框部件
复选框部件 由两个部分组成:主体(LV_PART_MAIN
)和 勾选框(LV_PART_INDICATOR
),示意图如下:
我们可以通过 lv_checkbox_create()
函数来 创建复选框部件。
/**
* @brief 创建复选框部件
*
* @param parent 指向父部件的指针
* @return lv_obj_t* 指向复选框的指针
*/
lv_obj_t * lv_checkbox_create(lv_obj_t * parent);
设置复选框部件的文本 函数有两个:lv_checkbox_set_text()
和 lv_checkbox_set_text_static()
,前者设置的文本是保存在 动态分配 的内存中的(文本的内存可能会被释放),而后者设置的是 静态 的文本。
/**
* @brief 动态设置复选框的文本
*
* @param obj 指向复选框的指针
* @param txt 复选框的文本
*/
void lv_checkbox_set_text(lv_obj_t * obj, const char * txt);
/**
* @brief 静态设置复选框的文本
*
* @param obj 指向复选框的指针
* @param txt 复选框的文本,使用 NULL 刷新当前文本
*/
void lv_checkbox_set_text_static(lv_obj_t * obj, const char * txt);
如果我们要 获取复选框的文本,可以通过 lv_checkbox_get_text()
函数获取。
/**
* @brief 获取复选框的文本
*
* @param obj 指向复选框的指针
* @return const char* 指向复选框文本的指针
*/
const char * lv_checkbox_get_text(const lv_obj_t * obj);
我们还可以通过 lv_obj_set_style_pad_column()
函数 设置勾选框与文本之间的间距。
/**
* @brief 设置部件列之间的填充
*
* @param obj 指向复选框的指针
* @param value 部件列之间填充的间距
* @param selector 选择样式何时生效
*/
void lv_obj_set_style_pad_column(lv_obj_t * obj, int32_t value, lv_style_selector_t selector);
复选框的状态有三种:选中、未选中 以及 禁用,用户调用 lv_obj_add_state()
(添加)和 lv_obj_clear_state()
(清除)函数来 设置复选框的状态。
void lv_obj_add_state(lv_obj_t * obj, lv_state_t state);
#define lv_obj_clear_state lv_obj_remove_state
void lv_obj_remove_state(lv_obj_t * obj, lv_state_t state);
二、实验例程
#include "lvgl.h"
#include "lv_port_disp_template.h"
#include "lv_port_indev_template.h"
lv_obj_t *label;
int main(void)
{
HAL_Init();
System_Clock_Init(8, 336, 2, 7);
Delay_Init(168);
SPI_Simulate_Init();
// SRAM_Init();
TIM_Base_Init(&g_tim6_handle, TIM6, 83, 999);
__HAL_TIM_CLEAR_IT(&g_tim6_handle, TIM_IT_UPDATE); // 清除更新中断标志位
HAL_TIM_Base_Start_IT(&g_tim6_handle); // 使能更新中断,并启动计数器
lv_init();
lv_port_disp_init();
lv_port_indev_init();
// 测试代码
label = lv_label_create(lv_scr_act()); // 创建标签部件
lv_obj_set_style_text_font(label, &lv_font_montserrat_30, LV_PART_MAIN); // 设置标签部件的字体样式
lv_obj_set_align(label, LV_ALIGN_TOP_MID); // 设置标签部件靠上居中对齐
lv_label_set_text(label, "checkBox test"); // 设置标签部件的文本内容
lv_obj_t *checkBox = lv_checkbox_create(lv_scr_act()); // 创建复选框部件
lv_obj_set_style_text_font(checkBox, &lv_font_montserrat_30, LV_PART_MAIN); // 设置复选框部件的文本大小
lv_obj_set_align(checkBox, LV_ALIGN_CENTER); // 设置复选框部件居中对齐
lv_checkbox_set_text(checkBox, "Sakura"); // 设置复选框的文本内容
lv_obj_set_style_pad_column(checkBox, 10, LV_STATE_DEFAULT); // 设置复选框的勾选框与文本之间的距离
lv_obj_add_state(checkBox, LV_STATE_CHECKED); // 设置复选框的状态为选中状态
lv_obj_add_event_cb(checkBox, checkBox_event_cb, LV_EVENT_VALUE_CHANGED, NULL); // 注册复选框的状态改变事件回调函数
while (1)
{
lv_timer_handler();
Delay_ms(5);
}
return 0;
}
void checkBox_event_cb(lv_event_t *e)
{
lv_event_code_t code = lv_event_get_code(e); // 获取事件的触发类型
lv_obj_t *target = lv_event_get_target(e); // 获取事件的触发源
const char *target_text;
if (target == checkBox)
{
target_text = lv_checkbox_get_text(target);
if (code == LV_EVENT_VALUE_CHANGED)
{
if (lv_obj_has_state(target, LV_STATE_CHECKED))
{
lv_label_set_text_fmt(label, "select %s", target_text);
}
else
{
lv_label_set_text_fmt(label, "unselect %s", target_text);
}
}
}
}