EEZ Studio是同squareline类似的,可以进行lvgl图形界面编辑器,目前的0.16.0版本支持lvgl9.0及以上版本,且目前还在更新。
详情见官网,笔者不在这里详细介绍EEZ Studio。
在外网这方面的资料非常少,大部分都是移植到arduino或者ESP32上,并且教程较少,所以只能自行摸索。
EEZ中有“flow”功能,就笔者这两天学习,大概就是和squareline中类似进行行为设置的选项。
里面有很多actions,可以不通过代码编辑即可实现变量值判断,比较,以及换页操作。
具体界面介绍可以看b站这位up的介绍EEZ Studio教程基于LVGL9.0
不过actions笔者也没太搞明白,后续继续了解会出这部分教程
——————————————————————————————————
好了,那么不废话了,这一期会将先编写的程序一直到codeblock模拟器上。
codeblock移植EEZ
在完成你的lvgl的界面设计后,使用bulid将工程编译保存在ui文件夹中
(有点坑的是如果你把EEZ Studio界面拖到副屏上,这个设置按钮可能会消失,wwww)
以下是正常的工具栏界面
文件夹路径可以在Settings -> Bulid中设置
移植部分只需要src路径下的ui文件夹即可
如何在codeblock添加文件在此不作介绍。
笔者在这里出现了两类错误,一个精度丢失,另外一个也许是gcc编辑器的版本不同导致的错误。
错误解决办法
(官方文件是这样写的)
更换编辑器版本感觉费时费力,因此这里将宏定义直接更改
将对应内容填写进去,因为是字符串拼接,不会有影响(大概= =||),不过笔者在后面通过编译后和预期内容相符
这个丢失精度的错误ui\eez-flow.cpp|5427|error: cast from 'void*' to 'uint32_t' {aka 'unsigned int'} loses precision [-fpermissive]|
可以使用uintptr_t
避免精度丢失。
最终效果
运行正常。
补充(调用)
忘记说如何在c中调用ui文件了
codeblock程序是基于正点原子的,其他教程的代码也类似
调用很简单,将初始化和tick函数添加进去即可
/**
* @file main
*
*/
/*********************
* INCLUDES
*********************/
#include <stdlib.h>
#include <unistd.h>
#include "lvgl/lvgl.h"
#include "lv_demos/src/lv_demo_widgets/lv_demo_widgets.h"
#include "lv_drivers/win32drv/win32drv.h"
#include "lv_demos/src/lv_demo_base/lv_demo_base.h"
#include <windows.h>
#include "my_gui.h"
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
static void hal_init(void);
static int tick_thread(void *data);
/**********************
* STATIC VARIABLES
**********************/
/**********************
* MACROS
**********************/
/**********************
* GLOBAL FUNCTIONS
**********************/
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow)
{
/*Initialize LittlevGL*/
lv_init();
/*Initialize the HAL for LittlevGL*/
lv_win32_init(hInstance, SW_SHOWNORMAL, 800, 480, NULL);
/*Output prompt information to the console, you can also use printf() to print directly*/
LV_LOG_USER("LVGL initialization completed!");
ui_init();
/*Run the demo*/
//lv_demo_widgets();
lv_mainstart();
while(!lv_win32_quit_signal) {
/* Periodically call the lv_task handler.
* It could be done in a timer interrupt or an OS task too.*/
ui_tick();
lv_task_handler();
usleep(10000); /*Just to let the system breath*/
}
return 0;
}
如果这对您有帮助,那请点个赞再走吧!