lv_table_create
用于创建表格- lv_obj_t * lv_table_create(lv_obj_t * parent);
- //parent:父对象的指针
- //ret:返回指向新创建的表格对象的指针
复制代码 lv_table_set_cell_value
用于设置表格(lv_table)单元格内容的函数。通过此函数,可以为表格的每个单元格设置文本内容- void lv_table_set_cell_value(lv_obj_t * table, uint32_t row, uint32_t col, const char * txt);
- //table:指向表格对象的指针
- //row:单元格所在的行索引(从 0 开始)
- //col:单元格所在的列索引(从 0 开始)
- //txt:要设置的文本内容
复制代码 lv_table_set_cell_value_fmt
用于设置表格(lv_table)单元格内容的函数,支持格式化字符串。它类似于 C 语言中的 printf 函数,可以将变量格式化为字符串并设置到单元格中- void lv_table_set_cell_value_fmt(lv_obj_t * obj, uint16_t row, uint16_t col, const char * fmt, ...);
- //obj:指向表格对象的指针
- //row:单元格所在的行索引(从 0 开始)
- //col:单元格所在的列索引(从 0 开始)
- //fmt:格式化字符串,类似于 printf 中的格式化字符串,例如 "%d"、"%s" 等
复制代码 lv_table_set_row_cnt
用于设置表格(lv_table)行数- void lv_table_set_row_cnt(lv_obj_t * table, uint16_t row_cnt);
- //table:指向表格对象的指针
- //row_cnt:要设置的行数
复制代码 lv_table_set_col_cnt
用于设置表格(lv_table)列数- void lv_table_set_col_cnt(lv_obj_t * table, uint16_t col_cnt);
- //table:指向表格对象的指针
- //col_cnt:要设置的列数
复制代码 lv_table_set_col_width
用于设置表格(lv_table)某一列的宽度的函数- void lv_table_set_col_width(lv_obj_t * table, uint16_t col, uint16_t width);
- //table:指向表格对象的指针
- //col:要设置宽度的列索引(从 0 开始)
- //width:该列的宽度,单位为像素
复制代码 lv_table_add_cell_ctrl
用于向表格(lv_table)的指定单元格添加控制标志的函数。这些控制标志可以改变单元格的行为或外观,例如合并单元格或裁剪文本- void lv_table_add_cell_ctrl(lv_obj_t * obj, uint16_t row, uint16_t col, lv_table_cell_ctrl_t ctrl);
- //obj:指向表格对象的指针。
- //row:单元格所在的行索引(从 0 开始)
- //col:单元格所在的列索引(从 0 开始)
- //ctrl:要添加的控制标志
- /*
- LV_TABLE_CELL_CTRL_MERGE_RIGHT:将当前单元格与右侧单元格合并。
- LV_TABLE_CELL_CTRL_TEXT_CROP:裁剪单元格内的文本(实际效果可能因版本而异)。
- LV_TABLE_CELL_CTRL_CUSTOM_1 到 LV_TABLE_CELL_CTRL_CUSTOM_4:自定义控制标志,可用于自定义单元格的行为
- */
复制代码 lv_table_clear_cell_ctrl
用于清除表格(lv_table)单元格的控制标志- void lv_table_clear_cell_ctrl(lv_obj_t * obj, uint16_t row, uint16_t col, lv_table_cell_ctrl_t ctrl);
- //obj:指向表格对象的指针。
- //row:单元格所在的行索引(从 0 开始)
- //col:单元格所在的列索引(从 0 开始)
- //ctrl:要清除的控制标志
复制代码 lv_table_set_cell_user_data
用于为表格(lv_table)的单元格设置用户自定义数据的函数。通过此函数,可以将任意数据(例如指针或整数)与表格的单元格关联起来,以便在事件处理或其他逻辑中使用。- void lv_table_set_cell_user_data(lv_obj_t * table, uint16_t row, uint16_t col, void * user_data);
- //table:指向表格对象的指针。
- //row:单元格所在的行索引(从 0 开始)
- //col:单元格所在的列索引(从 0 开始)
- //user_data:要设置的用户自定义数据。可以是任意指针或整数
复制代码 lv_table_get_cell_value
用于获取表格(lv_table)单元格内容的函数- const char * lv_table_get_cell_value(const lv_obj_t * table, uint16_t row, uint16_t col);
- //table:指向表格对象的指针
- //row:单元格所在的行索引(从 0 开始)
- //col:单元格所在的列索引(从 0 开始)
- //ret:返回一个指向单元格内容的字符串。如果单元格没有内容,返回值可能是 NULL 或空字符串
复制代码 lv_table_get_row_cnt
用于获取表格(lv_table)当前行数- uint16_t lv_table_get_row_cnt(const lv_obj_t * table);
- //table:指向表格对象的指针
- //ret:返回表格的当前行数
复制代码 lv_table_get_col_cnt
用于获取表格(lv_table)当前列数- uint16_t lv_table_get_col_cnt(const lv_obj_t * table);
- //table:指向表格对象的指针
- //ret:返回表格的当前列数
复制代码 lv_table_get_col_width
用于获取表格(lv_table)某一列宽度的函数- lv_coord_t lv_table_get_col_width(const lv_obj_t * table, uint16_t col_id);
- //table:指向表格对象的指针。
- //col_id:要获取宽度的列索引(从 0 开始)
- //ret:返回指定列的宽度,单位为像素
复制代码 lv_table_has_cell_ctrl
用于检查表格(lv_table)的某个单元格是否具有特定控制标志的函数。通过此函数,可以查询单元格是否设置了如合并单元格或裁剪文本等控制标志- bool lv_table_has_cell_ctrl(const lv_obj_t * table, uint16_t row, uint16_t col, lv_table_cell_ctrl_t ctrl);
- //table:指向表格对象的指针
- //row:单元格所在的行索引(从 0 开始)
- //col:单元格所在的列索引(从 0 开始)
- //ctrl:要检查的控制标志
- //LV_TABLE_CELL_CTRL_MERGE_RIGHT:检查单元格是否与右侧单元格合并
- //LV_TABLE_CELL_CTRL_TEXT_CROP:检查单元格文本是否被裁剪
- //LV_TABLE_CELL_CTRL_CUSTOM_1 到 LV_TABLE_CELL_CTRL_CUSTOM_4:检查自定义控制标志
- //ret:返回一个布尔值:true:表示单元格具有指定的控制标志。false:表示单元格不具有指定的控制标志
复制代码 lv_table_get_selected_cell
用于获取表格(lv_table)当前选中单元格的行和列索引的函数- bool lv_table_get_selected_cell(const lv_obj_t * table, uint16_t * row, uint16_t * col);
- //table:指向表格对象的指针
- //row:指向一个 uint16_t 类型的变量,用于存储选中单元格的行索引
- //col:指向一个 uint16_t 类型的变量,用于存储选中单元格的列索引
复制代码 lv_table_get_cell_user_data
用于获取表格(lv_table)单元格的用户自定义数据的函数- void* lv_table_get_cell_user_data(const lv_obj_t * table, uint16_t row, uint16_t col);
- //table:指向表格对象的指针
- //row:单元格所在的行索引(从 0 开始)
- //col:单元格所在的列索引(从 0 开始)
- //ret:返回单元格的用户自定义数据的指针。如果未设置用户数据,返回 NULL
复制代码- /**
- * 使用表格创建轻量级列表示例
- * 实现了带开关状态的高效列表显示
- */
- #if LV_USE_TABLE && LV_BUILD_EXAMPLES
- #define ITEM_CNT 200 // 列表项数量
- // 自定义绘制事件回调 - 用于绘制单元格中的开关控件
- static void draw_event_cb(lv_event_t * e)
- {
- lv_obj_t * obj = lv_event_get_target(e); // 获取触发事件的表格对象
- lv_obj_draw_part_dsc_t * dsc = lv_event_get_draw_part_dsc(e); // 获取绘制部件描述符
-
- // 如果正在绘制单元格内容
- if(dsc->part == LV_PART_ITEMS) {
- // 检查当前单元格是否设置了自定义控制标志1(表示开关状态)
- bool chk = lv_table_has_cell_ctrl(obj, dsc->id, 0, LV_TABLE_CELL_CTRL_CUSTOM_1);
- // 初始化矩形绘制描述符
- lv_draw_rect_dsc_t rect_dsc;
- lv_draw_rect_dsc_init(&rect_dsc);
-
- // 根据开关状态设置背景颜色
- rect_dsc.bg_color = chk ? lv_theme_get_color_primary(obj) : lv_palette_lighten(LV_PALETTE_GREY, 2);
- rect_dsc.radius = LV_RADIUS_CIRCLE; // 设置圆角为圆形,形成开关背景
-
- // 定义开关控件区域
- lv_area_t sw_area;
- sw_area.x1 = dsc->draw_area->x2 - 50; // 靠右对齐
- sw_area.x2 = sw_area.x1 + 40;
- sw_area.y1 = dsc->draw_area->y1 + lv_area_get_height(dsc->draw_area) / 2 - 10; // 垂直居中
- sw_area.y2 = sw_area.y1 + 20;
-
- // 绘制开关背景
- lv_draw_rect(dsc->draw_ctx, &rect_dsc, &sw_area);
- // 设置开关按钮颜色
- rect_dsc.bg_color = lv_color_white();
-
- // 根据开关状态调整按钮位置
- if(chk) {
- sw_area.x2 -= 2;
- sw_area.x1 = sw_area.x2 - 16; // 打开状态:按钮靠右
- }
- else {
- sw_area.x1 += 2;
- sw_area.x2 = sw_area.x1 + 16; // 关闭状态:按钮靠左
- }
- sw_area.y1 += 2;
- sw_area.y2 -= 2; // 缩小一点,形成内凹效果
-
- // 绘制开关按钮
- lv_draw_rect(dsc->draw_ctx, &rect_dsc, &sw_area);
- }
- }
- // 单元格值改变事件回调 - 处理开关状态切换
- static void change_event_cb(lv_event_t * e)
- {
- lv_obj_t * obj = lv_event_get_target(e); // 获取触发事件的表格对象
- uint16_t col, row;
- lv_table_get_selected_cell(obj, &row, &col); // 获取选中单元格坐标
-
- // 检查当前开关状态
- bool chk = lv_table_has_cell_ctrl(obj, row, 0, LV_TABLE_CELL_CTRL_CUSTOM_1);
-
- // 切换开关状态
- if(chk) lv_table_clear_cell_ctrl(obj, row, 0, LV_TABLE_CELL_CTRL_CUSTOM_1);
- else lv_table_add_cell_ctrl(obj, row, 0, LV_TABLE_CELL_CTRL_CUSTOM_1);
- }
- /**
- * 使用表格创建轻量级列表
- */
- void lv_example_table_2(void)
- {
- /*内存使用监测*/
- lv_mem_monitor_t mon1;
- lv_mem_monitor(&mon1); // 记录初始内存状态
- uint32_t t = lv_tick_get(); // 记录开始时间
- // 创建表格对象
- lv_obj_t * table = lv_table_create(lv_scr_act());
- // 设置表格高度,使其可滚动
- lv_obj_set_size(table, LV_SIZE_CONTENT, 200);
- // 设置列宽和行列数量
- lv_table_set_col_width(table, 0, 150);
- lv_table_set_row_cnt(table, ITEM_CNT); // 预分配足够行数,避免动态内存重分配
- lv_table_set_col_cnt(table, 1);
- // 移除单元格按下状态样式,使用自定义绘制
- lv_obj_remove_style(table, NULL, LV_PART_ITEMS | LV_STATE_PRESSED);
- // 填充表格数据
- uint32_t i;
- for(i = 0; i < ITEM_CNT; i++) {
- lv_table_set_cell_value_fmt(table, i, 0, "Item %"LV_PRIu32, i + 1); // 设置单元格文本
- }
- // 将表格居中对齐
- lv_obj_align(table, LV_ALIGN_CENTER, 0, -20);
- // 添加自定义绘制事件回调
- lv_obj_add_event_cb(table, draw_event_cb, LV_EVENT_DRAW_PART_END, NULL);
-
- // 添加值改变事件回调
- lv_obj_add_event_cb(table, change_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
- // 内存使用监测
- lv_mem_monitor_t mon2;
- lv_mem_monitor(&mon2); // 记录完成后内存状态
- // 计算内存使用和时间消耗
- uint32_t mem_used = mon1.free_size - mon2.free_size;
- uint32_t elaps = lv_tick_elaps(t);
- // 创建信息标签显示性能数据
- lv_obj_t * label = lv_label_create(lv_scr_act());
- lv_label_set_text_fmt(label, "%"LV_PRIu32" items were created in %"LV_PRIu32" ms\n"
- "using %"LV_PRIu32" bytes of memory",
- ITEM_CNT, elaps, mem_used);
- // 将标签放置在底部
- lv_obj_align(label, LV_ALIGN_BOTTOM_MID, 0, -10);
- }
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |