现象和这个一样: 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"); //"一七"
离线
为了排除编码问题, 连字符串我都用 UTF-8 硬编码了.
离线
感觉你这个。字库取模方式与你打点的方式不对。同时感觉字模的长度偏移也不对。
离线
现象和这个一样: 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"); //"一七"
我用LVGL7 测试正常噢: https://whycan.cn/t_5014.html#p50915
离线
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
离线
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
离线
终极解决方案, 这样可以用无签名的UTF-8文件了:
/utf-8 /source-charset:utf-8 /execution-charset:utf-8
离线
如果字符串里面有某些汉字, 比如 "流", 即使按楼上的操作, 还是有可能出现编译错误,
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");
离线