届表 发表于 2025-6-30 23:07:24

LVGL-微调框

lv_spinbox_create

用于创建微调框(Spinbox)控件的函数
lv_obj_t* lv_spinbox_create(lv_obj_t* parent);
//parent:父对象指针
//ret:指向创建的微调框对象的指针,若创建失败返回 NULLlv_spinbox_set_value

用于设置微调框(Spinbox)数值的函数
void lv_spinbox_set_value(lv_obj_t* spinbox, int32_t value);
//spinbox:微调框对象指针
//value:要设置的整数值,需根据微调框的数字格式转换为实际显示值lv_spinbox_set_rollover

设置微调框(Spinbox)数值循环模式的函数,允许数值在达到范围极限时自动跳转到另一端
void lv_spinbox_set_rollover(lv_obj_t* spinbox, bool enable);
//spinbox:微调框对象指针
//enable:true 启用循环模式,false 禁用(默认)lv_spinbox_set_digit_format

用于设置微调框(Spinbox)数字显示格式的函数,允许自定义数字位数、小数点位置等
void lv_spinbox_set_digit_format(lv_obj_t* spinbox, uint8_t digit_count, uint8_t separator_position);
//spinbox:微调框对象指针
//digit_count:总位数(不包括小数点分隔符和符号位)
//separator_position:小数点前的位数。若为 0,则不显示小数点lv_spinbox_set_step

用于设置微调框(Spinbox)数值增减步长的函数,控制每次增减操作时的数值变化量
void lv_spinbox_set_step(lv_obj_t* spinbox, uint32_t step);
//spinbox:微调框对象指针
//step:步长值,必须是 10 的幂次方(如 1, 10, 100, 1000 等),对应修改的数字位数lv_spinbox_set_range

用于设置微调框(Spinbox)数值范围的函数,控制用户可输入或调整的最小值和最大值
void lv_spinbox_set_range(lv_obj_t* spinbox, int32_t min, int32_t max);
//spinbox:微调框对象指针
//min:允许的最小值(含)
//max:允许的最大值(含)lv_spinbox_set_cursor_pos

用于设置微调框(Spinbox)光标位置的函数,允许用户指定当前编辑的数字位(从最低位开始计数)
void lv_spinbox_set_cursor_pos(lv_obj_t* spinbox, uint8_t pos);
//spinbox:微调框对象指针
//pos:光标位置索引,从右向左计数(0 表示最低位,即个位数)lv_spinbox_set_digit_step_direction

用于设置微调框(Spinbox)在编辑模式下光标移动方向的函数,尤其适用于编码器(Encoder)输入场景
void lv_spinbox_set_digit_step_direction(lv_obj_t* spinbox, lv_dir_t direction);
//spinbox:微调框对象指针
//direction:移动方向,可选值:
//LV_DIR_RIGHT(默认):光标向右移动(从低位到高位)。
//LV_DIR_LEFT:光标向左移动(从高位到低位)lv_spinbox_get_rollover

用于获取微调框(Spinbox)是否启用循环模式(Rollover)的函数
bool lv_spinbox_get_rollover(lv_obj_t* spinbox);
//spinbox:微调框对象指针
//ret:true:循环模式已启用(数值达到极限时会从另一端继续)。false:循环模式已禁用(数值达到极限时会停止变化)lv_spinbox_get_value

用于获取微调框(Spinbox)当前数值的函数,返回的是整数形式的原始值,用户需根据数字格式(如小数位数)自行转换为实际值
int32_t lv_spinbox_get_value(lv_obj_t* spinbox);
//spinbox:微调框对象指针
//ret:微调框的当前整数值,需结合 digit_format 转换为实际显示值lv_spinbox_get_step

用于获取微调框(Spinbox)当前步长(Step)的函数,返回的是整数形式的原始步长值,需根据数字格式(如小数位数)自行转换为实际步长
int32_t lv_spinbox_get_step(lv_obj_t* spinbox);
//spinbox:微调框对象指针
//ret:微调框的当前步长整数值,需结合 digit_format 转换为实际步长lv_spinbox_step_next

用于将微调框(Spinbox)的编辑光标移动到下一个低位数字的函数,同时自动调整步长(Step)为当前值的 1/10。
void lv_spinbox_step_next(lv_obj_t* spinbox);
//spinbox:微调框对象指针lv_spinbox_step_prev

用于将微调框(Spinbox)的编辑光标移动到前一个高位数字的函数,同时自动调整步长(Step)为当前值的 10 倍
void lv_spinbox_step_prev(lv_obj_t* spinbox);
//spinbox:微调框对象指针lv_spinbox_increment

用于增加微调框(Spinbox)数值的 API 函数,其核心功能是根据当前光标位置和步长对数值进行递增操作
void lv_spinbox_increment(lv_obj_t* spinbox);
//spinbox:微调框对象指针lv_spinbox_decrement

用于减少微调框(Spinbox)数值的函数,其功能与 lv_spinbox_increment() 对应,但执行数值递减操作
void lv_spinbox_decrement(lv_obj_t* spinbox);
////spinbox:微调框对象指针// 定义一个全局变量,用于存储数值选择框(spinbox)对象
static lv_obj_t * spinbox;

// 定义一个回调函数,用于处理数值增加事件
static void lv_spinbox_increment_event_cb(lv_event_t * e)
{
    // 获取事件的类型
    lv_event_code_t code = lv_event_get_code(e);
    // 如果事件是短按或长按重复
    if(code == LV_EVENT_SHORT_CLICKED || code == LV_EVENT_LONG_PRESSED_REPEAT) {
      // 调用 LVGL 的函数,增加数值选择框的值
      lv_spinbox_increment(spinbox);
    }
}

// 定义一个回调函数,用于处理数值减少事件
static void lv_spinbox_decrement_event_cb(lv_event_t * e)
{
    // 获取事件的类型
    lv_event_code_t code = lv_event_get_code(e);
    // 如果事件是短按或长按重复
    if(code == LV_EVENT_SHORT_CLICKED || code == LV_EVENT_LONG_PRESSED_REPEAT) {
      // 调用 LVGL 的函数,减少数值选择框的值
      lv_spinbox_decrement(spinbox);
    }
}

/**
* 创建一个带有自定义增减按钮的数值选择框
*/
void lv_example_spinbox_1(void)
{
    // 创建一个数值选择框对象,并将其添加到当前屏幕
    spinbox = lv_spinbox_create(lv_scr_act());
    // 设置数值选择框的范围:最小值为 -1000,最大值为 25000
    lv_spinbox_set_range(spinbox, -1000, 25000);
    // 设置数值选择框的数字格式:显示 5 位整数和 2 位小数
    lv_spinbox_set_digit_format(spinbox, 5, 2);
    // 将数值选择框的值设置为前一个步长
    lv_spinbox_step_prev(spinbox);
    // 设置数值选择框的宽度为 100 像素
    lv_obj_set_width(spinbox, 100);
    // 将数值选择框居中
    lv_obj_center(spinbox);

    // 获取数值选择框的高度
    lv_coord_t h = lv_obj_get_height(spinbox);

    // 创建一个按钮,用于增加数值
    lv_obj_t * btn = lv_btn_create(lv_scr_act());
    // 设置按钮的大小为数值选择框的高度
    lv_obj_set_size(btn, h, h);
    // 将按钮对齐到数值选择框的右侧中间,距离为 5 像素
    lv_obj_align_to(btn, spinbox, LV_ALIGN_OUT_RIGHT_MID, 5, 0);
    // 设置按钮的背景图片为加号图标
    lv_obj_set_style_bg_img_src(btn, LV_SYMBOL_PLUS, 0);
    // 为按钮添加事件回调函数,处理数值增加事件
    lv_obj_add_event_cb(btn, lv_spinbox_increment_event_cb, LV_EVENT_ALL, NULL);

    // 创建另一个按钮,用于减少数值
    btn = lv_btn_create(lv_scr_act());
    // 设置按钮的大小为数值选择框的高度
    lv_obj_set_size(btn, h, h);
    // 将按钮对齐到数值选择框的左侧中间,距离为 -5 像素
    lv_obj_align_to(btn, spinbox, LV_ALIGN_OUT_LEFT_MID, -5, 0);
    // 设置按钮的背景图片为减号图标
    lv_obj_set_style_bg_img_src(btn, LV_SYMBOL_MINUS, 0);
    // 为按钮添加事件回调函数,处理数值减少事件
    lv_obj_add_event_cb(btn, lv_spinbox_decrement_event_cb, LV_EVENT_ALL, NULL);
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: LVGL-微调框