【LVGL】标签部件

引言

标签部件(lv_lable)

image

一、创建标签部件

image

第二种设置文本的方式带来的问题:

  1. 指定的缓冲区内存被修改或释放,则这个文本中的数据是不可靠的。
  2. 假如缓冲区是只读的话,通过代码段将文本写到缓冲区中则程序容易崩溃。

示例程序

void my_gui(void)
{
    // 创建标签部件
    lv_obj_t *label = lv_label_create(lv_scr_act());   /* 创建一个标签部件 */
    // 设置文本的三种方式
    // 1、lv_label_set_text(label, "hallo");           /* 直接设置文本,存储文本的内存动态分配 */
    // 2、lv_label_set_text_static(label, "hallo");    /* 文本不存储在动态内存区,而是在指定的缓存区中(慎用) */
    // 3、lv_label_set_text_fmt(label, "hallo%d", 50); /* 格式化显示文本,类似printf方式使用 */
}

现象:(仅展示第三个)

image

二、改变文本样式

image

示例程序

void my_gui(void)
{
    lv_obj_t *label = lv_label_create(lv_scr_act());     /* 创建一个标签部件 */
    lv_label_set_text(label, "hallo");   /* 直接设置文本,存储文本的内存动态分配 */

    lv_obj_set_style_bg_color( label, lv_color_hex(0xff0000), LV_STATE_DEFAULT );   /* 设置背景颜色 */
    lv_obj_set_style_bg_opa( label, 100, LV_STATE_DEFAULT );   /* 设置背景透明度 */
    // lv_conf.h文件中官方提供字体,需要哪一个字体要在宏中勾上
    lv_obj_set_style_text_font( label, &lv_font_montserrat_48, LV_STATE_DEFAULT );  /* 设置字体大小(默认只能显示英文) */
    lv_obj_set_style_text_color( label, lv_color_hex(0xf7b37b), LV_STATE_DEFAULT );  /* 设置文本颜色 */

    // 单独着色
    lv_label_set_recolor( label, true );                /* 开启重新着色功能 */
    lv_label_set_text( label, "hallo #ff0000 lvgl# " ); /* 单独设置颜色 */
}

现象:

image

三、显示长文本

image

示例程序

void my_gui(void)
{
    lv_obj_t *label = lv_label_create(lv_scr_act());     /* 创建一个标签部件 */
    lv_label_set_text(label, "hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo");   /* 直接设置文本,存储文本的内存动态分配 */
    lv_obj_set_size(label, 100, 50);    /* 设置标签大小:长宽 */

    lv_label_set_long_mode(label, LV_LABEL_LONG_DOT);   /* 设置长文本后为省略模式 */
}

现象:

image

附:缓冲区标签崩溃现象

void my_gui(void)
{
    lv_obj_t *label = lv_label_create(lv_scr_act());     /* 创建一个标签部件 */
    lv_label_set_text_static(label, "hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo hallo");   /* 文本存储在缓存区中 */
    lv_obj_set_size(label, 100, 50);    /* 设置标签大小:长宽 */

    lv_label_set_long_mode(label, LV_LABEL_LONG_DOT);   /* 设置长文本后为省略模式 */
}

以上程序将标签文本存储在了缓存区中,文本是从代码段传入的是只读的,而lv_label_set_long_mode函数是改变文本的内容,从而就发生了崩溃,故说lv_label_set_text_static此函数不熟悉内存时需要慎用。

博客导航

博客导航

posted @ 2025-11-09 14:25  膝盖中箭卫兵  阅读(5)  评论(0)    收藏  举报
ORCID iD icon https://orcid.org/0000-0001-5102-772X