WhyCan Forum(哇酷开发者社区)

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn

您尚未登录。

#1 2020-08-02 22:57:41

我思故我在
会员
注册时间: 2019-09-03
累计积分: 239

请教各位, LVGL 无法显示汉字

现象和这个一样: https://github.com/lvgl/lvgl/issues/1662

这个是我的代码:

lv_obj_set_style_local_text_font(label1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_simsun_16_cjk);

lv_label_set_text(label1, "ABC\xE4\xB8\x80\xE4\xB8\x83ZZZ"); //"一七"

QQ截图20200802225659.png

离线

#2 2020-08-02 22:58:19

我思故我在
会员
注册时间: 2019-09-03
累计积分: 239

Re: 请教各位, LVGL 无法显示汉字

为了排除编码问题, 连字符串我都用 UTF-8 硬编码了.

离线

#3 2020-08-03 09:49:32

xk100
会员
注册时间: 2018-12-13
累计积分: 41

Re: 请教各位, LVGL 无法显示汉字

感觉你这个。字库取模方式与你打点的方式不对。同时感觉字模的长度偏移也不对。

离线

#4 2020-08-03 09:58:30

xk100
会员
注册时间: 2018-12-13
累计积分: 41

Re: 请教各位, LVGL 无法显示汉字

供你参考   st16.zip

离线

#5 2020-08-03 10:33:17

明月照我沟渠
会员
注册时间: 2020-07-09
累计积分: 102

Re: 请教各位, LVGL 无法显示汉字

我思故我在 说:

现象和这个一样: https://github.com/lvgl/lvgl/issues/1662

这个是我的代码:

lv_obj_set_style_local_text_font(label1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_simsun_16_cjk);

lv_label_set_text(label1, "ABC\xE4\xB8\x80\xE4\xB8\x83ZZZ"); //"一七"

https://whycan.cn/files/members/1947/QQ截图20200802225659.png

我用LVGL7 测试正常噢: https://whycan.cn/t_5014.html#p50915

离线

#6 2020-08-03 16:20:56

明月照我沟渠
会员
注册时间: 2020-07-09
累计积分: 102

Re: 请教各位, LVGL 无法显示汉字

VC2017终于识别utf-8字符串了:

lv_label_set_text(label2, "一七");

但是文件一定要保存成 带签名的UTF-8文件,
如果保存成不带签名的UTF-8文件, 遇到汉字会出现编译错误.

然后还得加上编译指令:

#if defined(_MSC_VER) && (_MSC_VER >= 1900)   
# pragma execution_character_set("utf-8")   
#endif

参考: https://blog.csdn.net/wrzfeijianshen/article/details/84948234

离线

#7 2020-08-03 17:08:23

明月照我沟渠
会员
注册时间: 2020-07-09
累计积分: 102

Re: 请教各位, LVGL 无法显示汉字

lvgl 的按钮不能直接设置他的按钮标题, 只能把Button作为父容器, 创建一个Label:


#include "../../lv_examples.h"

static void btn_event_cb(lv_obj_t * btn, lv_event_t event)
{
    if(event == LV_EVENT_CLICKED) {
        static uint8_t cnt = 0;
        cnt++;

        /*Get the first child of the button which is the label and change its text*/
        lv_obj_t * label = lv_obj_get_child(btn, NULL);
        lv_label_set_text_fmt(label, "Button: %d", cnt);
    }
}

/**
 * Create a button with a label and react on Click event.
 */
void lv_ex_get_started_1(void)
{
    lv_obj_t * btn = lv_btn_create(lv_scr_act(), NULL);     /*Add a button the current screen*/
    lv_obj_set_pos(btn, 10, 10);                            /*Set its position*/
    lv_obj_set_size(btn, 120, 50);                          /*Set its size*/
    lv_obj_set_event_cb(btn, btn_event_cb);                 /*Assign a callback to the button*/

    lv_obj_t * label = lv_label_create(btn, NULL);          /*Add a label to the button*/
    lv_label_set_text(label, "Button");                     /*Set the labels text*/
}

代码: https://github.com/lvgl/lv_examples/blob/master/src/lv_ex_get_started/lv_ex_get_started_1.c

离线

#8 2020-08-04 00:00:22

明月照我沟渠
会员
注册时间: 2020-07-09
累计积分: 102

Re: 请教各位, LVGL 无法显示汉字

QQ截图20200803235902.png

QQ截图20200803235837.png





终极解决方案, 这样可以用无签名的UTF-8文件了:

/utf-8 /source-charset:utf-8  /execution-charset:utf-8

参考: https://blog.csdn.net/xs1102/article/details/83186321

离线

#9 2020-08-07 22:38:36

起个名字好难
会员
注册时间: 2020-04-16
累计积分: 2

Re: 请教各位, LVGL 无法显示汉字

如果字符串里面有某些汉字, 比如 "流", 即使按楼上的操作, 还是有可能出现编译错误,

1>\system_main.c(81): error C2001: 常量中有换行符
1>\system_main.c(82): error C2143: 语法错误: 缺少“)”(在“}”的前面)
1>\system_main.c(90): error C2065: “t”: 未声明的标识符
1>\system_main.c(90): warning C4047: “函数”:“lv_task_t *”与“int”的间接级别不同
1>\system_main.c(90): warning C4024: “lv_task_ready”: 形参和实参 1 的类型不同
1>\system_main.c(674): warning C4018: “>”: 有符号/无符号不匹配



解决办法:

在字符串最后加 \0 即可, 如

lv_label_set_text(label1, "流\0");

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB