需求:通过按钮点击实现加减乘除的简易计算器。
1.我们使用矩阵按钮(lv_btnmatrix)快速创建布局,文本框(lv_textarea)显示结果。
2.在按钮回调中将点击结果加入文本框上显示。
矩阵按钮相对于普通按钮:文章来源:https://www.toymoban.com/news/detail-755648.html
文章来源地址https://www.toymoban.com/news/detail-755648.html
lv_obj_t * calc_ta=NULL ;//矩阵按钮对象
double calc_result=0;//计算结果
char textbuf[50];//字符串缓存
static const char * calc_btnm_map[] = {"""\xE6\xB8\x85"/*清*/"""\xE9\x99\xA4"/*除*/"","\n",
"7", "8", "9","/","\n",
"4", "5","6","*","\n",
"1", "2", "3", "-","\n",
".","0","=","+",
""
};//最后一个元素必须为空字符串!
//计算器按钮回调事件
void calc_event_handler(lv_obj_t * obj, lv_event_t event)
{
if(event == LV_EVENT_CLICKED)
{
const char * txt = lv_btnmatrix_get_active_btn_text(obj);
if(!strcmp(txt,"="))
{
//计算结果显示
sprintf(textbuf,"%s\n",lv_textarea_get_text(calc_ta));//格式字符串
calc_result = EvaluateExpression(textbuf);//将字符串(例如:1+2-3/3)传入计算函数中 返回计算结果
if((calc_result - (int)calc_result) == 0)//无小数则取整数
{
sprintf(textbuf,"%d",(int)calc_result);
}
else
{
sprintf(textbuf,"%lf",calc_result);//calc_result 转换为字符串
}
lv_textarea_set_text(calc_ta,textbuf);//文本框显示计算结果
}
else if(!strcmp(txt,"""\xE6\xB8\x85"/*清*/"""\xE9\x99\xA4"/*除*/""))
{
calc_result=0;
lv_textarea_set_text(calc_ta,"");
}
else
{
lv_textarea_add_text(calc_ta,txt);//将1-9 +-*/ 加入文本框中
}
}
}
//绘制简易计算器UI
void init_ui_calc(lv_obj_t *par)
{
//创建一个容器对象 存放按钮矩阵
lv_obj_t * cont = lv_cont_create(par, NULL);
//设置容器的大小和位置
lv_obj_set_size(cont, 480, 450);
lv_obj_align(cont, NULL, LV_ALIGN_CENTER, 80, 0);
//设置容器的布局为LV_LAYOUT_COLUMN_LEFT
lv_cont_set_layout(cont, LV_LAYOUT_COLUMN_MID);
//文本框 用于显示数据
calc_ta = lv_textarea_create(cont, NULL);
lv_obj_set_size(calc_ta, 470, 50);
lv_textarea_set_text_align(calc_ta, LV_LABEL_ALIGN_LEFT);
lv_textarea_set_text(calc_ta,"");
//按钮矩阵
lv_obj_t * btnm = lv_btnmatrix_create(cont,0);
lv_btnmatrix_set_map(btnm,calc_btnm_map);
lv_obj_set_event_cb(btnm, calc_event_handler);
//lv_obj_set_size(obj,width,height)
lv_obj_set_size(btnm,470,350);
}
到了这里,关于龙芯1b(LS1B200)使用LVGL7.0.1组件 按钮矩阵 实现简易计算器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!