LVGL之label控件遇到问题记录(二)

1 篇文章 0 订阅

在上一篇问题记录中解决完label中text(图标+英文)文本的居中及彩色变化,链接如下

LVGL之label控件遇到问题记录(一)

没想到今天用之前那种方法想搞成图标+中文显示竟然失败了!!!

首先确保C文件是UTF-8编码格式,排除编码格式原因。

附上失败品代码段

lv_obj_t *paraSetlab = lv_label_create(contLEV2,NULL);
lv_obj_set_style(paraSetlab,&stylemonitor_cn);
lv_label_set_recolor(paraSetlab,true);    /* 允许文字重新着色  */
lv_label_set_text(paraSetlab,"#ff0000  \uF21E##000000   参数监控#");

lv_label_set_long_mode(paraSetlab, LV_LABEL_LONG_BREAK);
lv_obj_set_size(paraSetlab, 320, 32);
lv_label_set_align(paraSetlab,LV_LABEL_ALIGN_CENTER);
lv_obj_set_pos(paraSetlab,0,8);

这样运行后屏幕只会显示个红色心跳图标和一个黑色的字符"c',尝试很多次终于找到原因,代码lv_label_set_text(paraSetlab,"#ff0000 \uF21E##000000   参数监控#");中"\uF21E"可以识别为Unicode码,后面的"参数监控"应该也默认识别为Unicode,所以这里会出错。

  后面将两者更换位置,即将中文放在前面,图标放在后面,可以正常显示,但是我的目的是将"图标+中文"的方式显示,然后又尝试其它方法。

我们知道LVGL库里面会给一些常用的图标的定义,在lv_symbol_def.h文件中,下附上一些相关图标内容:

#define LV_SYMBOL_AUDIO           "\xef\x80\x81" /*61441, 0xF001*/
#define LV_SYMBOL_VIDEO           "\xef\x80\x88" /*61448, 0xF008*/
#define LV_SYMBOL_LIST            "\xef\x80\x8b" /*61451, 0xF00B*/
#define LV_SYMBOL_OK              "\xef\x80\x8c" /*61452, 0xF00C*/
#define LV_SYMBOL_CLOSE           "\xef\x80\x8d" /*61453, 0xF00D*/
#define LV_SYMBOL_POWER           "\xef\x80\x91" /*61457, 0xF011*/
#define LV_SYMBOL_SETTINGS        "\xef\x80\x93" /*61459, 0xF013*/
#define LV_SYMBOL_HOME            "\xef\x80\x95" /*61461, 0xF015*/
#define LV_SYMBOL_DOWNLOAD        "\xef\x80\x99" /*61465, 0xF019*/
#define LV_SYMBOL_DRIVE           "\xef\x80\x9c" /*61468, 0xF01C*/
#define LV_SYMBOL_REFRESH         "\xef\x80\xa1" /*61473, 0xF021*/

看到这些突然明白(PS:之前玩过一段时间的EMWIN,当初用的就是XEF显示中文),可以使用另一种方法来实现我的目标,即UTF-8格式的图标+中文;

然后

lv_label_set_text(paraSetlab,"#ff0000  \uF21E##000000   参数监控#");

便被我改成了

lv_label_set_text(paraSetlab,"#ff0000  \xef\x88\x9e##000000   参数监控#");

然后,然后,目标就实现了!当然,我觉得应该还有其它方法,等后面发现了再更新。

可能有人会问我,"\uF21E"怎么转换成"\xef\x88\x9e",下面附上个在线转换链接

Unicode转UTF

这是我那个图标转换的过程

又尝试了其它方法,也可以,如下

lv_label_set_text(paraSetlab,"#ff0000  \uF21E##000000   参数监控#");

改成

lv_label_set_text(paraSetlab,"#ff0000  \uF21E##000000   /u53C2/u6570/u76D1/u63A7#");

附上转换图

现在想一下,无非是编码格式的区别而已。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值