当前位置: 首页 > news >正文

【LVGL-列表部件 lv_list_create】

LVGL-列表部件 lv_list_create

  • ■ LVGL-列表部件-函数
  • ■ 修改样式-
    • ■ 修改样式- 背景色
    • ■ 修改样式- 改变项的颜色-label
    • ■ 修改样式- 改变项的颜色-btn
  • ■ 事件(Event)
  • ■ 示例0:综合
  • ■ 示例1(自动出现滚动)
  • ■ 示例2(滚动捕捉)
  • ■ 示例3(创建带有浮动按钮的列表)
  • ■ 示例4(设置滚动条的样式)
  • ■ 示例5(从右到左基本方向滚动)
  • ■ 示例6(当对象滚动时平移对象)

■ LVGL-列表部件-函数

1. 创建list
lv_obj_t* list1 = lv_list_create(lv_scr_act(), NULL);2. 添加文本
lv_list_add_text(list1, "item4 - try to scroll");4. 增加按键(Add buttons)
list_btn = lv_list_add_btn(list1, NULL, "Open");
list_btn = lv_list_add_btn(list1, LV_SYMBOL_CLOSE, "Close");
list_btn = lv_list_add_btn(list1, NULL, "Edit");5. 删除按键(Delete buttons)
lv_list_remove(list, btn_index)6. 清空列表
lv_list_clean(list)7. 手动导航(Manual navigation)
lv_list_up(list)     //选择上一个列表元素
lv_list_down(list)  //选择列表下一个元素  8. 把某一个button获取焦点 
lv_list_focus(btn, LV_ANIM_ON/OFF)9. 布局(Layout)
lv_list_set_layout(list, LV_LAYOUT_ROW_MID) //默认列表是纵向的,但是可以设置为横向10. 边界闪烁(Edge flash)
lv_list_set_edge_flash(list, true)  //开启边界闪烁11. 滚动传播(Scroll propagation)
lv_list_set_scroll_propagation(list, true)12. 事件(Event)
lv_obj_t* list1 = lv_list_create(lv_scr_act(), NULL);
lv_obj_set_size(list1, 160, 200);
lv_obj_align(list1, NULL, LV_ALIGN_CENTER, 0, 0);list_btn = lv_list_add_btn(list1, LV_SYMBOL_FILE, "New");
lv_obj_set_event_cb(list_btn, list_event_handler);list_btn = lv_list_add_btn(list1, LV_SYMBOL_DIRECTORY, "Open");
lv_obj_set_event_cb(list_btn, list_event_handler);

■ 修改样式-

■ 修改样式- 背景色

直接修改list
lv_obj_set_style_bg_color(list1, lv_color_hex(0xff0000), LV_PART_MAIN);

在这里插入图片描述

■ 修改样式- 改变项的颜色-label

item = lv_obj_get_child(list1, 0);
lv_obj_set_style_bg_color(item, lv_color_hex(0xff0000), LV_PART_MAIN);

在这里插入图片描述

■ 修改样式- 改变项的颜色-btn

item = lv_obj_get_child(list1, 5);
lv_obj_set_style_bg_color(item, lv_color_hex(0xff0000), LV_PART_MAIN);

在这里插入图片描述

■ 事件(Event)

static void list_event_handler(lv_obj_t* obj, lv_event_t event)
{if (event == LV_EVENT_CLICKED) {printf("Clicked: %s\n", lv_list_get_btn_text(obj));}
}void lvgl_list_test(void)
{/*Create a list*/lv_obj_t* list1 = lv_list_create(lv_scr_act(), NULL);lv_obj_set_size(list1, 160, 200);lv_obj_align(list1, NULL, LV_ALIGN_CENTER, 0, 0);/*Add buttons to the list*/lv_obj_t* list_btn;list_btn = lv_list_add_btn(list1, LV_SYMBOL_FILE, "New");lv_obj_set_event_cb(list_btn, list_event_handler);list_btn = lv_list_add_btn(list1, LV_SYMBOL_DIRECTORY, "Open");lv_obj_set_event_cb(list_btn, list_event_handler);}

■ 示例0:综合

/* 获取当前活动屏幕的宽高 */
#define scr_act_width() lv_obj_get_width(lv_scr_act())
#define scr_act_height() lv_obj_get_height(lv_scr_act())static lv_obj_t *list;              /* 定义列表 */
static lv_obj_t *list_label;        /* 定义标签 */
static const lv_font_t *font;       /* 定义字体 *//*** @brief  列表按钮事件回调* @param  *e :事件相关参数的集合,它包含了该事件的所有数据* @return 无*/
static void list_btn_event_cb(lv_event_t *e)
{lv_obj_t *list_btn = lv_event_get_target(e);                                   /* 获取触发源 */lv_label_set_text(list_label, lv_list_get_btn_text(list, list_btn));           /* 获取按钮文本并显示 */lv_obj_add_state(list_btn, LV_STATE_FOCUS_KEY);                                /* 添加状态(聚焦) */
}/*** @brief  例* @param  无* @return 无*/
static void lv_example_list(void)
{font = &lv_font_montserrat_18;/* 创建左侧矩形背景 */lv_obj_t* obj_left = lv_obj_create(lv_scr_act());                               /* 创建一个基础对象 */lv_obj_set_width(obj_left, scr_act_width() * 0.7);                              /* 设置宽度 */lv_obj_set_height(obj_left, scr_act_height() * 0.9);                            /* 设置高度 */lv_obj_align(obj_left, LV_ALIGN_LEFT_MID, 5, 0);                                /* 设置位置 */lv_obj_update_layout(obj_left);                                                 /* 手动更新物体的参数 *//* 创建右侧矩形背景 */lv_obj_t* obj_right = lv_obj_create(lv_scr_act());                              /* 创建一个基础对象 */lv_obj_set_width(obj_right, scr_act_width() - lv_obj_get_width(obj_left) - 15); /* 设置宽度 */lv_obj_set_height(obj_right, lv_obj_get_height(obj_left));                      /* 设置高度 */lv_obj_align_to(obj_right, obj_left, LV_ALIGN_OUT_RIGHT_MID, 5, 0);             /* 设置位置 */lv_obj_update_layout(obj_right);                                                /* 手动更新物体的参数 *//* 显示当前选项的文本内容 */list_label = lv_label_create(obj_right);                                        /* 创建标签 */lv_obj_set_width(list_label, lv_obj_get_width(obj_right) - 13);                 /* 设置标签的宽度 */lv_obj_align(list_label, LV_ALIGN_TOP_MID, 0, 5);                               /* 设置标签位置 */lv_obj_update_layout(list_label);                                               /* 手动更新标签的参数 */lv_obj_set_style_text_align(list_label, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN);    /* 设置标签文本对齐方式 */lv_label_set_text(list_label, "New");                                           /* 设置标签文本 */lv_obj_set_style_text_font(list_label, font, LV_PART_MAIN);                     /* 设置标签文本字体 *//* 创建列表 */list = lv_list_create(obj_left);                                                /* 创建列表 */lv_obj_set_width(list, lv_obj_get_width(obj_left) * 0.8);                       /* 设置列表宽度 */lv_obj_set_height(list, lv_obj_get_height(obj_left) * 0.9);                     /* 设置列表高度 */lv_obj_center(list);                                                            /* 设置列表的位置 */lv_obj_set_style_text_font(list, font, LV_PART_MAIN);                           /* 设置字体 *//* 为列表添加按钮 */lv_obj_t* btn;lv_list_add_text(list, "File");                                                 /* 添加列表文本 */btn = lv_list_add_btn(list, LV_SYMBOL_FILE, "New");                             /* 添加按钮 */lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */btn = lv_list_add_btn(list, LV_SYMBOL_DIRECTORY, "Open");                       /* 添加按钮 */lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */btn = lv_list_add_btn(list, LV_SYMBOL_SAVE, "Save");                            /* 添加按钮 */lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */btn = lv_list_add_btn(list, LV_SYMBOL_CLOSE, "Delete");                         /* 添加按钮 */lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */btn = lv_list_add_btn(list, LV_SYMBOL_EDIT, "Edit");                            /* 添加按钮 */lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */lv_list_add_text(list, "Connectivity");                                         /* 添加列表文本 */btn = lv_list_add_btn(list, LV_SYMBOL_BLUETOOTH, "Bluetooth");                  /* 添加按钮 */lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */btn = lv_list_add_btn(list, LV_SYMBOL_GPS, "Navigation");                       /* 添加按钮 */lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */btn = lv_list_add_btn(list, LV_SYMBOL_USB, "USB");                              /* 添加按钮 */lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */btn = lv_list_add_btn(list, LV_SYMBOL_BATTERY_FULL, "Battery");                 /* 添加按钮 */lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */lv_list_add_text(list, "Exit");                                                 /* 添加列表文本 */btn = lv_list_add_btn(list, LV_SYMBOL_OK, "Apply");                             /* 添加按钮 */lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */btn = lv_list_add_btn(list, LV_SYMBOL_CLOSE, "Close");                          /* 添加按钮 */lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */
}

在这里插入图片描述

■ 示例1(自动出现滚动)

#include "../lv_examples.h"
#if LV_BUILD_EXAMPLES/*** Demonstrate how scrolling appears automatically*/
void lv_example_scroll_1(void)
{/*Create an object with the new style*/lv_obj_t * panel = lv_obj_create(lv_screen_active());lv_obj_set_size(panel, 200, 200);lv_obj_center(panel);lv_obj_t * child;lv_obj_t * label;child = lv_obj_create(panel);lv_obj_set_pos(child, 0, 0);lv_obj_set_size(child, 70, 70);label = lv_label_create(child);lv_label_set_text(label, "Zero");lv_obj_center(label);child = lv_obj_create(panel);lv_obj_set_pos(child, 160, 80);lv_obj_set_size(child, 80, 80);lv_obj_t * child2 = lv_button_create(child);lv_obj_set_size(child2, 100, 50);label = lv_label_create(child2);lv_label_set_text(label, "Right");lv_obj_center(label);child = lv_obj_create(panel);lv_obj_set_pos(child, 40, 160);lv_obj_set_size(child, 100, 70);label = lv_label_create(child);lv_label_set_text(label, "Bottom");lv_obj_center(label);
}#endif

在这里插入图片描述

■ 示例2(滚动捕捉)

#include "../lv_examples.h"
#if LV_BUILD_EXAMPLES && LV_USE_FLEXstatic void sw_event_cb(lv_event_t * e)
{lv_event_code_t code = lv_event_get_code(e);lv_obj_t * sw = lv_event_get_target(e);if(code == LV_EVENT_VALUE_CHANGED) {lv_obj_t * list = lv_event_get_user_data(e);if(lv_obj_has_state(sw, LV_STATE_CHECKED)) lv_obj_add_flag(list, LV_OBJ_FLAG_SCROLL_ONE);else lv_obj_remove_flag(list, LV_OBJ_FLAG_SCROLL_ONE);}
}/*** Show an example to scroll snap*/
void lv_example_scroll_2(void)
{lv_obj_t * panel = lv_obj_create(lv_screen_active());lv_obj_set_size(panel, 280, 120);lv_obj_set_scroll_snap_x(panel, LV_SCROLL_SNAP_CENTER);lv_obj_set_flex_flow(panel, LV_FLEX_FLOW_ROW);lv_obj_align(panel, LV_ALIGN_CENTER, 0, 20);uint32_t i;for(i = 0; i < 10; i++) {lv_obj_t * btn = lv_button_create(panel);lv_obj_set_size(btn, 150, lv_pct(100));lv_obj_t * label = lv_label_create(btn);if(i == 3) {lv_label_set_text_fmt(label, "Panel %"LV_PRIu32"\nno snap", i);lv_obj_remove_flag(btn, LV_OBJ_FLAG_SNAPPABLE);}else {lv_label_set_text_fmt(label, "Panel %"LV_PRIu32, i);}lv_obj_center(label);}lv_obj_update_snap(panel, LV_ANIM_ON);#if LV_USE_SWITCH/*Switch between "One scroll" and "Normal scroll" mode*/lv_obj_t * sw = lv_switch_create(lv_screen_active());lv_obj_align(sw, LV_ALIGN_TOP_RIGHT, -20, 10);lv_obj_add_event_cb(sw, sw_event_cb, LV_EVENT_ALL, panel);lv_obj_t * label = lv_label_create(lv_screen_active());lv_label_set_text(label, "One scroll");lv_obj_align_to(label, sw, LV_ALIGN_OUT_BOTTOM_MID, 0, 5);
#endif
}#endif

在这里插入图片描述

■ 示例3(创建带有浮动按钮的列表)

#include "../lv_examples.h"
#if LV_BUILD_EXAMPLES && LV_USE_LISTstatic uint32_t btn_cnt = 1;static void float_button_event_cb(lv_event_t * e)
{lv_event_code_t code = lv_event_get_code(e);lv_obj_t * float_btn = lv_event_get_target(e);if(code == LV_EVENT_CLICKED) {lv_obj_t * list = lv_event_get_user_data(e);char buf[32];lv_snprintf(buf, sizeof(buf), "Track %d", (int)btn_cnt);lv_obj_t * list_btn = lv_list_add_button(list, LV_SYMBOL_AUDIO, buf);btn_cnt++;lv_obj_move_foreground(float_btn);lv_obj_scroll_to_view(list_btn, LV_ANIM_ON);}
}/*** Create a list with a floating button*/
void lv_example_scroll_3(void)
{lv_obj_t * list = lv_list_create(lv_screen_active());lv_obj_set_size(list, 280, 220);lv_obj_center(list);for(btn_cnt = 1; btn_cnt <= 2; btn_cnt++) {char buf[32];lv_snprintf(buf, sizeof(buf), "Track %d", (int)btn_cnt);lv_list_add_button(list, LV_SYMBOL_AUDIO, buf);}lv_obj_t * float_btn = lv_button_create(list);lv_obj_set_size(float_btn, 50, 50);lv_obj_add_flag(float_btn, LV_OBJ_FLAG_FLOATING);lv_obj_align(float_btn, LV_ALIGN_BOTTOM_RIGHT, 0, -lv_obj_get_style_pad_right(list, LV_PART_MAIN));lv_obj_add_event_cb(float_btn, float_button_event_cb, LV_EVENT_ALL, list);lv_obj_set_style_radius(float_btn, LV_RADIUS_CIRCLE, 0);lv_obj_set_style_bg_image_src(float_btn, LV_SYMBOL_PLUS, 0);lv_obj_set_style_text_font(float_btn, lv_theme_get_font_large(float_btn), 0);
}#endif

在这里插入图片描述

■ 示例4(设置滚动条的样式)

#include "../lv_examples.h"
#if LV_BUILD_EXAMPLES && LV_USE_LIST/*** Styling the scrollbars*/
void lv_example_scroll_4(void)
{lv_obj_t * obj = lv_obj_create(lv_screen_active());lv_obj_set_size(obj, 200, 100);lv_obj_center(obj);lv_obj_t * label = lv_label_create(obj);lv_label_set_text(label,"Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n""Etiam dictum, tortor vestibulum lacinia laoreet, mi neque consectetur neque, vel mattis odio dolor egestas ligula. \n""Sed vestibulum sapien nulla, id convallis ex porttitor nec. \n""Duis et massa eu libero accumsan faucibus a in arcu. \n""Ut pulvinar odio lorem, vel tempus turpis condimentum quis. Nam consectetur condimentum sem in auctor. \n""Sed nisl augue, venenatis in blandit et, gravida ac tortor. \n""Etiam dapibus elementum suscipit. \n""Proin mollis sollicitudin convallis. \n""Integer dapibus tempus arcu nec viverra. \n""Donec molestie nulla enim, eu interdum velit placerat quis. \n""Donec id efficitur risus, at molestie turpis. \n""Suspendisse vestibulum consectetur nunc ut commodo. \n""Fusce molestie rhoncus nisi sit amet tincidunt. \n""Suspendisse a nunc ut magna ornare volutpat.");/*Remove the style of scrollbar to have clean start*/lv_obj_remove_style(obj, NULL, LV_PART_SCROLLBAR | LV_STATE_ANY);/*Create a transition the animate the some properties on state change*/static const lv_style_prop_t props[] = {LV_STYLE_BG_OPA, LV_STYLE_WIDTH, 0};static lv_style_transition_dsc_t trans;lv_style_transition_dsc_init(&trans, props, lv_anim_path_linear, 200, 0, NULL);/*Create a style for the scrollbars*/static lv_style_t style;lv_style_init(&style);lv_style_set_width(&style, 4);      /*Width of the scrollbar*/lv_style_set_pad_right(&style, 5);  /*Space from the parallel side*/lv_style_set_pad_top(&style, 5);    /*Space from the perpendicular side*/lv_style_set_radius(&style, 2);lv_style_set_bg_opa(&style, LV_OPA_70);lv_style_set_bg_color(&style, lv_palette_main(LV_PALETTE_BLUE));lv_style_set_border_color(&style, lv_palette_darken(LV_PALETTE_BLUE, 3));lv_style_set_border_width(&style, 2);lv_style_set_shadow_width(&style, 8);lv_style_set_shadow_spread(&style, 2);lv_style_set_shadow_color(&style, lv_palette_darken(LV_PALETTE_BLUE, 1));lv_style_set_transition(&style, &trans);/*Make the scrollbars wider and use 100% opacity when scrolled*/static lv_style_t style_scrolled;lv_style_init(&style_scrolled);lv_style_set_width(&style_scrolled, 8);lv_style_set_bg_opa(&style_scrolled, LV_OPA_COVER);lv_obj_add_style(obj, &style, LV_PART_SCROLLBAR);lv_obj_add_style(obj, &style_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
}#endif

在这里插入图片描述

■ 示例5(从右到左基本方向滚动)

#include "../lv_examples.h"
#if LV_BUILD_EXAMPLES && LV_FONT_DEJAVU_16_PERSIAN_HEBREW/*** Scrolling with Right To Left base direction*/
void lv_example_scroll_5(void)
{lv_obj_t * obj = lv_obj_create(lv_screen_active());lv_obj_set_style_base_dir(obj, LV_BASE_DIR_RTL, 0);lv_obj_set_size(obj, 200, 100);lv_obj_center(obj);lv_obj_t * label = lv_label_create(obj);lv_label_set_text(label,"میکروکُنترولر (به انگلیسی: Microcontroller) گونه‌ای ریزپردازنده است که دارای حافظهٔ دسترسی تصادفی (RAM) و حافظهٔ فقط‌خواندنی (ROM)، تایمر، پورت‌های ورودی و خروجی (I/O) و درگاه ترتیبی (Serial Port پورت سریال)، درون خود تراشه است، و می‌تواند به تنهایی ابزارهای دیگر را کنترل کند. به عبارت دیگر یک میکروکنترلر، مدار مجتمع کوچکی است که از یک CPU کوچک و اجزای دیگری مانند تایمر، درگاه‌های ورودی و خروجی آنالوگ و دیجیتال و حافظه تشکیل شده‌است.");lv_obj_set_width(label, 400);lv_obj_set_style_text_font(label, &lv_font_dejavu_16_persian_hebrew, 0);}#endif

在这里插入图片描述

■ 示例6(当对象滚动时平移对象)

#include "../lv_examples.h"
#if LV_BUILD_EXAMPLES && LV_USE_FLEXstatic void scroll_event_cb(lv_event_t * e)
{lv_obj_t * cont = lv_event_get_target(e);lv_area_t cont_a;lv_obj_get_coords(cont, &cont_a);int32_t cont_y_center = cont_a.y1 + lv_area_get_height(&cont_a) / 2;int32_t r = lv_obj_get_height(cont) * 7 / 10;uint32_t i;uint32_t child_cnt = lv_obj_get_child_count(cont);for(i = 0; i < child_cnt; i++) {lv_obj_t * child = lv_obj_get_child(cont, i);lv_area_t child_a;lv_obj_get_coords(child, &child_a);int32_t child_y_center = child_a.y1 + lv_area_get_height(&child_a) / 2;int32_t diff_y = child_y_center - cont_y_center;diff_y = LV_ABS(diff_y);/*Get the x of diff_y on a circle.*/int32_t x;/*If diff_y is out of the circle use the last point of the circle (the radius)*/if(diff_y >= r) {x = r;}else {/*Use Pythagoras theorem to get x from radius and y*/uint32_t x_sqr = r * r - diff_y * diff_y;lv_sqrt_res_t res;lv_sqrt(x_sqr, &res, 0x8000);   /*Use lvgl's built in sqrt root function*/x = r - res.i;}/*Translate the item by the calculated X coordinate*/lv_obj_set_style_translate_x(child, x, 0);/*Use some opacity with larger translations*/lv_opa_t opa = lv_map(x, 0, r, LV_OPA_TRANSP, LV_OPA_COVER);lv_obj_set_style_opa(child, LV_OPA_COVER - opa, 0);}
}/*** Translate the object as they scroll*/
void lv_example_scroll_6(void)
{lv_obj_t * cont = lv_obj_create(lv_screen_active());lv_obj_set_size(cont, 200, 200);lv_obj_center(cont);lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_COLUMN);lv_obj_add_event_cb(cont, scroll_event_cb, LV_EVENT_SCROLL, NULL);lv_obj_set_style_radius(cont, LV_RADIUS_CIRCLE, 0);lv_obj_set_style_clip_corner(cont, true, 0);lv_obj_set_scroll_dir(cont, LV_DIR_VER);lv_obj_set_scroll_snap_y(cont, LV_SCROLL_SNAP_CENTER);lv_obj_set_scrollbar_mode(cont, LV_SCROLLBAR_MODE_OFF);uint32_t i;for(i = 0; i < 20; i++) {lv_obj_t * btn = lv_button_create(cont);lv_obj_set_width(btn, lv_pct(100));lv_obj_t * label = lv_label_create(btn);lv_label_set_text_fmt(label, "Button %"LV_PRIu32, i);}/*Update the buttons position manually for first*/lv_obj_send_event(cont, LV_EVENT_SCROLL, NULL);/*Be sure the fist button is in the middle*/lv_obj_scroll_to_view(lv_obj_get_child(cont, 0), LV_ANIM_OFF);
}#endif

在这里插入图片描述

相关文章:

【LVGL-列表部件 lv_list_create】

LVGL-列表部件 lv_list_create ■ LVGL-列表部件-函数■ 修改样式-■ 修改样式- 背景色■ 修改样式- 改变项的颜色-label■ 修改样式- 改变项的颜色-btn ■ 事件(Event)■ 示例0&#xff1a;综合■ 示例1&#xff08;自动出现滚动&#xff09;■ 示例2&#xff08;滚动捕捉&…...

【P2-6】ESP8266 WIFI模块在STA模式下实现UDP与电脑/手机网络助手通信——UDP数据透传

前言:完成ESP8266 WIFI模块在STA模式下实现UDP与电脑/手机网络助手通信——实现UDP数据透传 STA模式,通俗来说就是模块/单片机去连接路由器/热点来通信。 UDP协议,是传输层协议,UDP没有服务器和客户端的说法。 本实验需要注意,wifi模块/单片机与电脑/手机需要连接在同一个…...

从零学习大模型(十)-----剪枝基本概念

剪枝的基本概念 模型压缩中的地位&#xff1a;剪枝是模型压缩中的重要技术之一&#xff0c;它通过减少模型的参数量来降低计算资源的需求。对于大型神经网络&#xff0c;尤其是像BERT、GPT等参数量级巨大的模型&#xff0c;剪枝可以有效地减少模型的内存占用和计算量&#xff…...

Jest进阶知识:模拟 ES6 类 - 掌握类的依赖模拟与方法监听技巧

引言 在现代前端开发中&#xff0c;ES6 类&#xff08;class&#xff09;是常用的一种面向对象编程方式。在测试类的时候&#xff0c;我们经常需要模拟类的依赖&#xff0c;以避免外部因素对测试结果的影响。Jest 提供了强大的工具来模拟类及其方法&#xff0c;确保测试的高效…...

前端Nginx的安装与应用

目录 一、前端跨域方式 1.1、CORS(跨域资源共享) 1.2、JSONP(已过时) 1.3、WebSocket 1.4、PostMessage 1.5、Nginx 二、安装 三、应用 四、命令 4.1、基本操作命令 4.2、nginx.conf介绍 4.2.1、location模块 4.2.2、反向代理配置 4.2.3、负载均衡模块 4.2.4、通…...

Java设计模式(代理模式整理中ing)

一、代理模式 1、代理模式定义&#xff1a; 代理模式&#xff1a;由于某些原因要给某对象提供一个代理以控制对该对象的访问&#xff0c;这时访问对象不适合或者不能够直接引用目标对象&#xff0c;代理对象作为访问对象与目标对象之间的中介进行连接调控调用。 2、代理模式的…...

第J9周:Inception v3算法实战与解析(pytorch版)

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营]中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊]** &#x1f4cc;本周任务&#xff1a;&#x1f4cc; 了解并学习InceptionV3相对与InceptionV1有哪些改进的地方 使用Inception完成天气…...

如何封装一个axios,封装axios有哪些好处

什么是Axios Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;用于在浏览器和 Node.js 中发送异步网络请求。它简化了发送 GET、POST、PUT、DELETE 等请求的过程&#xff0c;并且支持请求拦截、响应拦截、取消请求和自动处理 JSON 数据等功能。 为什么要封装Axios 封装…...

java的批量update

这个问题挺有代表性的&#xff0c;今天拿出来给大家一起分享一下&#xff0c;希望对你会有所帮助。 1 案发现场 有一天上午&#xff0c;在我的知识星球群里&#xff0c;有位小伙伴问了我一个问题&#xff1a;批量更新你们一般是使用when case吗&#xff1f;还是有其他的批量更…...

go语言连续监控事件并回调处理

前言 go语言中使用回调函数处理事件&#xff1a;事件监测部分&#xff08;如无限循环中的事件检测逻辑&#xff09;可以独立于具体的业务处理逻辑。这使得代码的各个部分更加清晰&#xff0c;易于理解和维护。如果需要更改事件处理的方式&#xff0c;只需要修改注册的回调函数…...

1.探索WebSocket:实时网络的心跳!

序言 你可能听说过"WebSokcet"这个词&#xff0c;感觉它好像很高深&#xff0c;但其实它是一个超级酷的小工具&#xff0c;让我们在Web应用里实现实时通信。想象一下&#xff0c;你可以像聊天一样&#xff0c;在浏览器和服务器之间来回“畅聊“&#xff0c;没有延迟…...

uniapp学习(010-2 实现抖音小程序上线)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第113p的内容 文章目录 抖音小程序下载抖音开发者工具先去开发者工具里进行测试 抖音开放平台配置开始打包上传…...

测试和实施面试题收集

前端+测试+运维+算法综合 前端部分面试题 判断第二个日期比第一个日期大 如何用脚本判断用户输入的的字符串是下面的时间格式2004-11-21 必须要保证用户的输入是此格式,并且是时间,比如说月份不大于12等等,另外我需要用户输入两个,并且后一个要比前一个晚,只允许用JAVASCR…...

【Vue3】一文全览基础语法-案例程序及配图版

文章目录 Vue应用基本结构模块化开发ref和reactive绑定事件 v-on 简写显示和隐藏 v-show条件渲染 v-if动态属性绑定 v-bind 简写&#xff1a;遍历数组或对象 v-for双向数据绑定 v-model渲染数据 v-text 和 v-html计算属性 computed侦听器 watch自动侦听器 watchEffect 本文示例…...

【OpenSearch】安装部署OpenSearch和OpenSearch-Dashboard

一、安装OpenSearch 1.禁用主机swap提高性能 sudo swapoff -a2.增加OpenSearch可用的内存映射数量。 编辑sysctl配置文件 sudo vi /etc/sysctl.conf在文件中添加一行来定义所需的值&#xff0c; 或者如果键存在&#xff0c;则更改值&#xff0c;然后保存您的更改。 vm.max…...

【系统架构设计师】2023年真题论文: 论软件可靠性评价的设计与实现(包括和素材和论文)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2023年 试题3)论文素材参考论文参考摘要正文总结真题题目(2023年 试题3) 软件可靠性评价是利用可靠性数学模型、统计技术等,对软件失效数据进行处理,评估和预测软件可靠性的过程,包括选择模型、收集数…...

教程:使用 InterBase Express 访问数据库(二)

1. 添加数据模块(IBX 通用教程) 本节将创建一个数据模块(TDataModule),这是一种包含应用程序使用的非可视组件的表单。 以下是完全配置好的 TDataModule 的视图: 创建 TDataModule 后,您可以在其他表单中使用这个数据模块。 2. 添加 TDataModule 要将数据模块添加到…...

Windows密码的网络认证---基于挑战响应认证的NTLM协议

一&#xff0c;网络认证NTLM协议简介 在平时的测试中&#xff0c;经常会碰到处于工作组的计算机&#xff0c;处于工作组的计算机之间是无法建立一个可信的信托机构的&#xff0c;只能是点对点进行信息的传输。 举个例子就是&#xff0c;主机A想要访问主机B上的资源&#xff0c;…...

fpga 常量无法改变

parameter LED_ON_PERIOD0 n0*CLOCK_FREQ; parameter LED_OFF_PERIOD0 (2-n0)*CLOCK_FREQ;这种代码的变量不会无法内部修改 需要改成reg形式并在这种逻辑里面修改变量 always (posedge clk_ref or negedge sys_rst_n) begin虽然是并行逻辑 但是变量尽量还是先赋值从硬件上并…...

【HarmonyOS NEXT】如何给未知类型对象定义类型并使用递归打印所有的Key

关键词&#xff1a;嵌套对象、类型、递归、未知类型 目录 使用 Record 与 ESObject 定义未知对象类型 递归打印未知类型对象的key 在鸿蒙应用开发中&#xff0c;所有的数据都必须定义类型&#xff0c;且不存在 any 类型&#xff0c;那么我们当遇到 key 值可能随时变化的情况…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置&#xff1a;遍历整个矩阵&#xff0c;找出所有值为 0 的元素&#xff0c;并将它们的坐标记录在数组zeroPosition中置零操作&#xff1a;遍历记录的所有 0 元素位置&#xff0c;将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...