CN117608560B - Lvgl页面显示代码生成方法、装置、设备及介质 - Google Patents

Lvgl页面显示代码生成方法、装置、设备及介质 Download PDF

Info

Publication number
CN117608560B
CN117608560B CN202410095595.7A CN202410095595A CN117608560B CN 117608560 B CN117608560 B CN 117608560B CN 202410095595 A CN202410095595 A CN 202410095595A CN 117608560 B CN117608560 B CN 117608560B
Authority
CN
China
Prior art keywords
page
lvgl
code
template
child control
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202410095595.7A
Other languages
English (en)
Other versions
CN117608560A (zh
Inventor
崔京军
刘明聪
付杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Caos Chuangzhi Iot Technology Co ltd
Original Assignee
Caos Chuangzhi Iot Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Caos Chuangzhi Iot Technology Co ltd filed Critical Caos Chuangzhi Iot Technology Co ltd
Priority to CN202410095595.7A priority Critical patent/CN117608560B/zh
Publication of CN117608560A publication Critical patent/CN117608560A/zh
Application granted granted Critical
Publication of CN117608560B publication Critical patent/CN117608560B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)

Abstract

本发明属于计算机领域,是LVGL页面显示代码生成方法、装置、设备及介质;包括:自开发方接收代码生成请求;响应并根据预先配置的、基于LVGL的页面显示模板和开发方提供的显示功能配置参数生成主页面代码和/或控件代码;在页面显示模板中配置有使用LVGL事件系统设置的主页面事件处理函数和/或控件事件处理函数;根据预先配置的、基于LVGL的子控件模板和开发方提供的子控件配置参数生成子控件代码;在子控件模板中配置有使用LVGL事件系统设置的子控件事件处理函数;执行初始化操作,封装并提供接口函数;开发方调用接口函数生成用于页面显示的应用程序,或接口函数并写入自定义代码,生成用于页面显示的应用程序;本发明具有更好的实用性。

Description

LVGL页面显示代码生成方法、装置、设备及介质
技术领域
本发明设计软件设计领域,尤其涉及一种LVGL页面显示代码生成方法、装置、设备以及介质。
背景技术
页面显示通常是指在软件应用程序中展示用户界面的过程。在图形用户界面(GUI)开发中,页面指一个包含用户界面元素(如按钮、文本框、标签等)的独立区域。
LVGL(Little GL)是一个用于嵌入式系统中创建用户界面的开源图形库,它本身提供了一些基本的组件和功能,可以用于构建用户界面。为了帮助开发者更容易入门、理解和使用这个开源图形库。LVGL提供了示例代码,示例代码通过演示LVGL的各种功能和用法,展示如何创建用户界面、处理事件、使用不同的组件等等。通过示例代码,可以实现良好的编码实践,包括代码组织、事件处理等等,有助于开发者在实际项目中更好地组织和设计代码。
示例代码(demo)的主要目的是帮助开发者快速入门和理解基本概念,示例代码会将相关的代码放在同一个文件或同一个函数中,使得代码片段更加集中,减少学习者的认知负担。此外,示例代码专注于演示某一方面的功能或用法,以供用户在其项目中直接使用。开发者可以以示例代码为基础来进行进一步的开发,实现具体的功能。但是示例代码不能复用,如果想要实现类似的功能,只能复制修改来实现,也即必须包含其它不相关功能的代码,或者手动去掉不相关功能的代码;这使得冗余的代码越来越多,程序变得越来越臃肿。
而且由于采用示例代码作为基础,在实现页面显示时,会使用全局变量存储数据,或者使用静态全局变量,使用全局变量存储数据会导致数据在不同部分之间的高度耦合,使得模板之间的关系紧密。全局变量通常是在整个应用程序的生命周期内保持状态的,如果页面的显示逻辑依赖于这些全局变量的状态,那么在第一次显示页面后,这些全局变量的状态可能已经被修改,导致第二次显示时的数据不一致或无效,而且,LVGL中的图形对象(如按钮、标签等)有自己的状态和属性。如果在全局变量中存储了与LVGL对象关联的状态,并且在两次显示页面之间未正确重置这些状态,可能会导致显示不正常。而且,每个页面都定义了自己的数据变量,导致相同的信息在不同的页面中都有独立的副本,一方面会造成数据冗余,增加内存消耗,另一方面,当信息发生变化时,需要手动更新每个页面对应的变量值,容易导致一致性问题。
发明内容
鉴于上述问题,本申请的第一个方面设计并提供一种LVGL页面显示代码生成方法。
LVGL页面显示代码生成方法,包括以下步骤:
自开发方接收代码生成请求;
响应于所述代码生成请求,根据预先配置的、基于LVGL的页面显示模板和开发方提供的显示功能配置参数生成主页面代码和/或控件代码;在所述页面显示模板中配置有使用LVGL事件系统设置的主页面事件处理函数和/或控件事件处理函数;
根据预先配置的、基于LVGL的子控件模板和开发方提供的子控件配置参数生成子控件代码;在所述子控件模板中配置有使用LVGL事件系统设置的子控件事件处理函数;
执行初始化操作,封装并提供接口函数;
开发方调用接口函数生成用于页面显示的应用程序;或者开发方调用接口函数并写入自定义代码,生成用于页面显示的应用程序。
本申请的第二个方面提供一种LVGL页面显示代码生成装置,包括:接收单元,其配置为接收代码生成请求;
第一生成单元,其配置为响应于所述代码生成请求,根据预先配置的、基于LVGL的页面显示模板和开发方提供的显示功能配置参数生成主页面代码和/或控件代码;在所述页面显示模板中配置有使用LVGL事件系统设置的主页面事件处理函数和/或控件事件处理函数;
第二生成单元,其配置为根据预先配置的、基于LVGL的子控件模板和开发方提供的子控件配置参数生成子控件代码;在所述子控件模板中配置有使用LVGL事件系统设置的子控件事件处理函数;
封装单元,其配置为执行初始化操作,封装并提供接口函数;和
调用单元,其配置为调用接口函数生成用于页面显示的应用程序;或者开发方调用接口函数并写入自定义代码,生成用于页面显示的应用程序。
本申请的第三个方面提供一种设备,包括处理器、通信接口、存储器、输入装置和输出装置;所述处理器、通信接口、存储器、输入装置和输出装置相互连接,其中,所述存储器用于存储计算机程序,所述处理器被配置用于调用所述计算机程序执行LVGL页面显示代码生成方法,LVGL页面显示代码生成方法,包括以下步骤:
自开发方接收代码生成请求;
响应于所述代码生成请求,根据预先配置的、基于LVGL的页面显示模板和开发方提供的显示功能配置参数生成主页面代码和/或控件代码;在所述页面显示模板中配置有使用LVGL事件系统设置的主页面事件处理函数和/或控件事件处理函数;
根据预先配置的、基于LVGL的子控件模板和开发方提供的子控件配置参数生成子控件代码;在所述子控件模板中配置有使用LVGL事件系统设置的子控件事件处理函数;
执行初始化操作,封装并提供接口函数;
开发方调用接口函数生成用于页面显示的应用程序;或者开发方调用接口函数并写入自定义代码,生成用于页面显示的应用程序。
本申请的第四个方面提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现LVGL页面显示代码生成方法,LVGL页面显示代码生成方法,包括以下步骤:
自开发方接收代码生成请求;
响应于所述代码生成请求,根据预先配置的、基于LVGL的页面显示模板和开发方提供的显示功能配置参数生成主页面代码和/或控件代码;在所述页面显示模板中配置有使用LVGL事件系统设置的主页面事件处理函数和/或控件事件处理函数;
根据预先配置的、基于LVGL的子控件模板和开发方提供的子控件配置参数生成子控件代码;在所述子控件模板中配置有使用LVGL事件系统设置的子控件事件处理函数;
执行初始化操作,封装并提供接口函数;
开发方调用接口函数生成用于页面显示的应用程序;或者开发方调用接口函数并写入自定义代码,生成用于页面显示的应用程序。
本发明所提供的代码生成方法,开发方无需手动编写大量重复性的LVGL代码,减少了开发时间和劳动成本;使用预先配置的模板和参数,确保生成的代码结构一致,提高代码的规范性和可维护性,预先配置的模板中的事件处理函数等已完成定义,开发方只需要提供配置参数,无需关心底层LVGL的实现细节,维持较好的代码结构性,实现快速开发,降低用户开发功能和项目维护的成本。
结合附图阅读本发明的具体实施方式后,本发明的其他特点和优点将变得更加清楚。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明所提供的LVGL页面显示代码生成方法的流程图;
图2是本发明所提供的LVGL页面显示代码生成装置的结构示意框图;
图3是本发明所提供的设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要理解的是,术语“中心”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此,不能理解为对本发明的限制。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“电连接”应做广义理解,例如,可以是固定电连接,也可以是可拆卸电连接,或一体地电连接。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。在实施方式的描述中,具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
为解决利用LVGL示例代码开发并实现页面显示时容易出现的一致性问题,同时避免数据冗余和内存消耗,本发明设计并提供一种基于LVGL的页面显示代码生成方法。LVGL(LittleGL)是嵌入式图形库,LVGL在嵌入式系统中用于创建图形用户界面。LVGL本身提供了各种图形元素,包括按钮、标签、文本框、图标等,可以用于构建各种用户界面组件。
LVGL本身同时包含事件系统,用于处理用户输入、定时器时间等。具体来说,LVGL支持多种类型的事件,其中包括按键事件、触摸屏事件、鼠标事件等。每种事件类型都与用户的特定交互方式相关联,每个控件(例如按钮、标签等)都可以关联一个或多个事件回调函数。LVGL事件系统中的回调函数定义了在特定事件发生时应该执行的操作。
LVGL通过使用图形库提供的API来创建图形界面元素,然后使用底层的显示驱动将这些界面元素渲染到屏幕上。
如图1所示,本发明在LVGL图形库的基础上,设计并提供一种基于LVGL的页面显示代码生成方法。
本发明所提供的方法借鉴MVC(Model-View-Controller,模型-视图-控制器)架构,以实现清晰的代码分离,同时更加易于维护和扩展,提高代码的可读性。更具体地说,将UI(用户界面,User Interface)与数据分离架构。
本发明包括如图1所示的多个步骤。
步骤S101:自开发方接收代码生成请求。
以嵌入式系统为例,配置有嵌入式系统的设备需要与用户交互,即需要应用程序实现用户界面的设计和实现,本发明所提供的基于LVGL的页面显示代码生成方法即是用于根据需求,生成实现用户界面的应用程序。开发方通常是指使用嵌入式系统的最终用户(包括开发者或者制造商)或者为最终用户服务的开发者,开发方根据实际的需求通过本发明所提供的方法生成相应的代码,以使得用户界面解决实际的问题或者满足特定的需求。例如,通过用户界面来监控和控制生产过程,操作医疗设备、实现智能家居产品的功能、控制车辆的电子系统、构建自己的项目(例如智能手表、自动植物浇灌系统等等)。
对于这些应用程序来说,通常可以同时存在多个同一类的主页面。示例性的,如果应用程序与多个实例或者设备交互,每个实例或者设备均可能需要独立的主页面。例如,一个监控系统可能需要显示多个相似的设备状态;或者一个应用程序可能支持多个用户,每个用户均需要独立的主页面以存储和展示其个性化的信息或设置;或者对于项目管理或者多工作区的应用程序,每个工作区或项目均可能需要有自己的主页面以显示相关的信息和功能。
此外,一些应用程序需要提供不同的视图模式,每个模式对应一个主页面,用户可以根据需要在不同的视图模式之间切换,还有可能应用程序需要支持多语言,每种语言可能需要有独立的主页面,以显示或隐藏特定的功能和信息。
基于此,在本申请的一些实施方式中,代码生成请求以主页面为单位生成,也即代码生成方法可以以主页面为单位进行复用,从而使得一个应用中可以同时存在多个同一类主页面。
步骤S102:响应于代码生成请求,根据预先配置的、基于LVGL的页面显示模板和开发方提供的显示功能配置参数生成主页面代码和/或控件代码;在页面显示模板中配置有使用LVGL事件系统设置的主页面事件处理函数和/或控件事件处理函数。
也即,在步骤S102中,根据预先配置的基于LVGL的页面显示模板和开发方提供的显示功能配置参数创建主页面或者控件本身。
需要说明的是,主页面是指用于在进入应用程序时看到的页面,承载着应用程序的核心功能、导航入口以及关键信息,旨在提供用户友好的入口,使用户能够快速访问应用程序的主要功能。控件是指除主页面之外的顶级控件,包括对话框(用于显示与用户进行交互的信息、提示或选项),对话框可以是模态的(阻止对其他窗口的交互)或者非模态的(允许同时与其他窗口交互)、子窗口、工具栏(包含工具按钮、图标或者其他控件,用于提供对特定功能或工具的快速访问)、菜单(包含应用程序的主要命令和选项)、通知栏(用于显示应用程序的通知、警告或消息)以及浮动窗口等。每一个控件都代表着一个独立的窗口或容器,他们可以包含其它子控件以构建复杂的用户界面。顶级控件和子控件的层次结构和多窗口设计允许应用程序更灵活地阻止和呈现信息,以满足用户的需求。
示例性地,预先配置的基于LVGL的页面显示模板包含宏定义和头文件保护、创建参数结构体定义、创建页面函数声明和头文件结束等几部分。
页面显示模板的代码包括预处理指令“#ifndef”、“#define” 和“#endif”以作为头文件保护或者预处理器宏,防止头文件被重复包含,使用这种头文件保护机制,可以防止同一个头文件在同一编译单元中被重复包含,避免由此因此的重定义错误。
在页面显示模板中采用结构体存储创建页面时的参数,包含通用的参数,例如父窗口指针、宽度和高度,还允许开发方写入每个页面独立的配置。示例性地,页面显示模板的代码包括:
“#ifndef _INCLUDE_DLG_TIPS_H_
#define _INCLUDE_DLG_TIPS_H_
/*********************
* DEFINES
*********************/
/***************************************************
* 页面创建参数
***************************************************/
typedef struct dlg_create_param_tips
{
// 这三个参数是每个主页面都有的
void *pParent; //父窗口对象指针
unsigned int width; //宽
unsigned int height; //高
///////////////////////////////////////////////////////////////////////
// 在这里添加每个页面自己有的,其他页面不一定会有
char * pMessage; // 要显示的提示信息
///////////////////////////////////////////////////////////////////////
} SDlgCreateParamTips;
/***************************************************
* 创建页面
* param pData 创建参数
* return 窗口对象指针
***************************************************/
extern void *ShowDlgTips(SDlgCreateParamTips *pData);
#endif”。
在页面显示模板中,结构体是一种表示开发方提供的显示功能配置参数的方式,开发方通过显示功能配置参数填充这个结构体,并将其传递给显示功能的接口函数,以配置创建特定类型的显示页面。“ShowDlgTips”函数用于创建页面,它接收一个指向“SDlgCreateParamTips”结构体的指针作为参数,并返回串口对象指针。这样的设计允许开发方在运行时动态地配置显示页面的外观和行为,而无需直接修改底层的显示功能代码。
页面显示模板中还包括标准库文件和官方库头文件,例如C库头文件和LVGL库头文件,提供基本的C库函数和LVGL库的功能。
页面显示模板中还包括其它功能模块的头文件,例如引入字体配置的相关功能,本模块头文件,本模块宏定义和本模块页面关联数据结构。本模块页面关联数据结构可以通过结构体体现,例如定义提示对话框关联的数据结构,包括创建页面时传入的参数、顶级页面指针,用于显示提示信息的子控件指针、定时器以及一些其他相关字段。必要的头文件引用、宏定义和数据结构定义可以使得页面显示模块对应的模板可以独立使用,并与其他模块一起构建完整的应用程序。
示例性地,主页面事件处理函数可以包括定时器处理函数,用于定时刷新界面。例如达到一定时间,则会关闭主页面;页面关联事件处理函数,处理点击事件,即检测相应的触发动作,触发关闭主页面的操作。主页面事件处理函数还包括关闭事件处理函数,关闭事件处理函数用于预先配置,以释放分配给每一个主页面或控件的数据存储代码。这些事件处理函数的实现是页面显示模板的一部分,它们定义了页面与用户交互时的行为。通过这样的事件处理函数,可以在页面显示模板中实现通用的逻辑,以确保页面的一致性和可复用性。
更具体地,可以通过“lv_timer_t”定时器对象,使用 LVGL 的定时器事件来实现定时处理,即通过 “lv_timer_create”创建了一个定时器对象,并设置了定时器回调函数为 “OnTimer”。LVGL同时提供其它对象事件,在此不再一一列举。
页面功能模板中还可以包括自定义释放代码,开发方可以根据具体的应用需求,在释放资源的时候添加自己的清理逻辑,页面功能模板的此项设计允许用户根据子的需要进行资源管理,确保释放的资源不会导致内存泄漏或其它问题。
在与开发方提供的显示功能配置参数结合后,即可以生成主页面代码和/或控件代码。
步骤S103:根据预先配置的、基于LVGL的子控件模板和开发方提供的子控件配置参数生成子控件代码;在所述子控件模板中配置有使用LVGL事件系统设置的子控件事件处理函数。
预先配置的、基于LVGL的子控件模板可以使用LVGL提供的函数(例如“lv_label_create”)创建子控件,并对子控件进行设置,包括长文本模式、文本对齐方式、宽度、文本颜色、字体等,将子控件在其父控件中居中对齐。通过向子控件模板传递开发方提供的子控件配置参数,开发方可以在创建子控件时动态地指定这些参数,从而使子控件的外观和行为可以在不同的场景中灵活地定制。子控件模板有助于提高代码的可维护性和灵活性,使得相似的子控件可以通过调整配置参数而不是修改模板代码来进行定制。
步骤S104:执行初始化操作,封装并提供接口函数。
在本发明的一个或多个实施例中,还可以配置一个初始化函数,该函数接收初始化参数并负责主页面、控件和子控件的初始化工作,例如设置主页面的样式,例如边框半径、边框宽度、页面的宽度和高度,背景透明度和颜色,在父窗口中居中对齐,添加页面事件回调函数,监听所有类型的事件等等。初始化函数可以使得在不同的地方调用相同的初始化逻辑变得更加方便,使得生成的代码更符合软件工程的模块化原则,即将相关功能组织成独立的模块或函数。如果只有一个主页面,或者主页面之间的初始化逻辑较大,生成代码时也可以保存开发方写入的自定义初始化操作(也称初始化逻辑)代码。
进一步封装并提供接口函数。接口函数是对外的接口函数,在函数内部,它可以执行以下步骤:
检查传入的参数是否有效;分配内存以存储页面的数据结构;初始化数据结构,并拷贝传入的创建参数,分配内存来存储提示信息的字符串,并将其拷贝到内存中,创建顶级页面对象(例如主页面),如果创建成功,则设置页面的用户数据和删除事件回调函数,初始化页面。
通过调用接口函数,可以方便地创建并显示一个顶级控件,例如主页面或者提示对话框,而通过定制的,开发方提供的显示功能配置参数,则可以实现不同风格和功能的主页面或者提示对话框。
步骤S105:开发方调用接口函数生成用于页面显示的应用程序;或者开发方调用接口函数并写入自定义代码,生成用于页面显示的应用程序。
示例性地,接口函数可以是ShowDlgTips函数,Main函数调用ShowDlgTips函数来创建并显示页面。
开发方调用接口函数之后,对LVGL进行初始化,初始化自定义事件;页面函数被进一步调用,页面创建并显示;进一步执行消息循环,用于处理事件任务。也即执行事件驱动程序,创建和显示图形界面,处理GUI事件。
生成应用程序后,在应用程序的启动阶段,初始化底层的显示驱动,通过调用“lv-init”函数进行LVGL的初始化,LVGL会与底层显示驱动进行适配,并准备好接收界面元素的创建和渲染。底层显示驱动是指用于与硬件显示设备进行交互的软件层,在嵌入式系统中,硬件显示设备可以是液晶显示屏等。底层显示驱动中包括与图形库(例如本申请中的LVGL)的适配层,为图形库提供接口,以便将图形界面元素的绘制操作映射到硬件操作。底层显示驱动可以由芯片厂商提供。
通过调用接口函数,创建主页面和控件。每个控件和子控件都有相应的属性和样式,进入主循环,LVGL会不断地处理事件、更新界面,并根据预先配置的参数,计算出每个控件和子控件的位置、大小、颜色等信息,LVGL进一步通过底层的显示驱动将计算好的界面元素的图形数据渲染到屏幕上。一旦界面元素的图形数据被渲染到屏幕上,底层的显示驱动可根据需要触发显示设备的刷新操作,以确保用户看到最新的界面。主循环会持续不断地执行,LVGL 不断地处理事件、更新界面,并通过底层显示驱动进行渲染,从而实现动态的GUI。整个过程中,底层的显示驱动充当了 LittlevGL 和硬件之间的桥梁,负责将高层的图形界面元素映射到底层的硬件显示设备上。
在嵌入式系统中,硬件资源受到限制,需要再可用资源内提供尽可能多个功能。因此,在需求端,即进一步分离出多个功能模块,并针对每一个功能模板构建相应的代码模板,在此基础上,本发明所提供的基于LVGL的页面显示代码生成方法还包括以下步骤:响应于所述代码生成请求,还可根据预先配置的数据管理模板和自定义生成数据管理代码;或者根据预先配置的自定义事件模板和自定义事件代码生成事件配置代码;或者根据预先配置的字体配置模板和自定义字体代码生成字体配置代码;或者根据预先配置的路径管理模板和自定义路径配置代码生成路径管理代码;或者根据预先配置的皮肤管理模板和自定义皮肤配置代码生成皮肤管理代码;或者根据预先配置的多语言管理模板和自定义语言配置代码生成多语言管理代码。
应用程序中所有数据都由数据管理模块进行管理。数据管理模板保留数据管理模块相关定义,预留添加自定义接口声明和接口实现的代码书写位置。数据管理代码用于配置数据管理模块,数据管理模块充当了应用程序数据的中心枢纽,负责集中管理和维护所有需要被应用程序使用和处理的数据;示例性地,这些数据包括状态信息、配置数据和用户首选项等。具体地,数据管理模板中可以包括数据管理模块的结构、函数和数据类型以定义数据管理模块的接口和核心逻辑。数据管理模板预留接口声明和实现的位置,允许写入自定义数据管理代码,使开发方能够在需要的时候添加自定义逻辑,结合数据管理模板和自定义字体代码即可生成数据管理代码,确保数据管理模块的灵活性和可扩展性。
LVGL框架本身提供自定义事件功能,但在实际使用过程中接口定义可能会存在不符合使用习惯的问题,因此,进一步配置有自定义事件模板。自定义事件模板优选设计为与LVGL框架预制时间的API声明方式一致。这种一致性有助于提高复用性,使得开发方在使用自定义事件时能够更加熟悉和边界,不需要学习额外的或不同风格的API,自定义事件模板还考虑到了扩展性的需求,通过预留添加自定义事件定义的位置,允许开发方写入自定义事件代码,使得开发者可以根据具体应用程序的需要添加自定义事件,而不受框架的限制。自定义事件模板中可包括定义自定义事件的结构、宏和函数等。结合预先配置的自定义事件模板和自定义事件代码生成事件配置代码,可以生成能够有效管理和使用自定义事件的代码,有助于提高应用程序的可维护性和可扩展性,使得开发者可以更加灵活地处理各种自定义事件。
类似的,字体配置模板包括字体定义、字体大小定义以及获取字体信息的接口定义。这些定义提供了一种标准的方式来管理字体,并在需要时灵活地更换字体。字体配置模板允许开发方提供自定义字体代码,即允许开发方自定义字体、字体大小,并预留了接口实现代码的位置,使得用户可以根据需要添加自定义的字体信息。结合预先配置的字体配置模板和自定义字体代码即可以生成字体配置代码。字体配置模板提供一个通用的、易扩展的字体管理框架,使得在应用程序中更换字体或者调整字体大小变得简单且可定制,有助于提高应用程序的可维护性和灵活性。
类似的,路径管理模板包括初始化接口和获取路径接口的定义。路径管理模块的设计允许开发方通过调用模块初始化接口,并传入不同的信息,来自定义路径的信息,允许在不同的情况下使用不同的路径配置。路径管理模板预留了实现模块初始化和获取路径接口的位置,允许开发方写入自定义路径配置代码,使得开发方可以根据实际需求进行自定义的路径管理。结合预先配置的路径管理模板和自定义路径配置代码可生成路径管理代码。路径管理模板提供一个通用的、易扩展的路径管理框架,使得在应用程序中更换文件路径或者动态配置路径变得简单且可定制,有助于提高应用程序的可维护性和灵活性。
类似的,皮肤管理模板包括皮肤定义、颜色定义、图片定义,还包括皮肤接口、获取当前皮肤接口、获取颜色接口、获取图片接口等,通过皮肤接口可以在运行时更改应用程序的皮肤,通过获取当前皮肤接口可以查询当前的皮肤信息,通过获取颜色接口和获取图片接口,可以获取当前皮肤下的颜色和图片资源,同时允许用户写入自定义皮肤配置代码,使得可以在不同的场景下使用不同的皮肤配置。结合预先配置的皮肤管理模板和自定义皮肤配置代码生成皮肤管理代码。皮肤管理模板提供一个通用的、易扩展的皮肤管理框架,使得在应用程序中更换皮肤或者动态配置皮肤变得简单且可定制。这有助于提高应用程序的外观灵活性和主题可定制性。
类似的,多语言管理模板可包括语言定义(例如包括支持的语言列表)、文本定义(包括应用程序中用的到的所有文本资源),还可定义设定当前语言的接口、获取当前语言的接口、获取文本的接口等。这些定义提供了一种的标准的方式来处理应用程序的多语言支持。同时允许用户写入自定义语言配置代码,使得可以在不同的场景下支持不同的语言配置。结合预先配置的多语言管理模板和自定义语言配置代码生成多语言管理代码。多语言管理模板提供一个通用的、易扩展的多语言支持框架,使得应用程序可以轻松地支持不同的语言设置,而不需要在整个应用程序中硬编码所有的文本资源,有助于提高应用程序的国际化和本地化能力。
通过这种页面显示模板和功能模块模板分离的配置,页面显示模板即可以专注于处理界面显示逻辑,而各个功能模块则负责管理自身领域的逻辑。这种模块化的设计使得每个功能模块都可以独立开发、测试和维护,同时也方便了日后对应用程序的修改和扩展。当应用程序需要新的功能或者修改现有功能时,只需要调整相应的功能模块,而不必修改整个页面显示模板的代码。
此外,通过将不同的功能分离成模块,可以更好地管理和优化嵌入式系统的资源,从而减小系统的内存占用和启动时间,也可以更容易适配不同平台和操作系统,提高系统的可移植性。
如图2所示,本发明的第二个方面提供一种基于LVGL的页面显示代码生成装置10,具体包括:
接收单元101,其配置为接收代码生成请求;
第一生成单元102,其配置为响应于所述代码生成请求,根据预先配置的、基于LVGL的页面显示模板和开发方提供的显示功能配置参数生成主页面代码和/或控件代码;在所述页面显示模板中配置有使用LVGL事件系统设置的主页面事件处理函数和/或控件事件处理函数;
第二生成单元103,其配置为根据预先配置的、基于LVGL的子控件模板和开发方提供的子控件配置参数生成子控件代码;在所述子控件模板中配置有使用LVGL事件系统设置的子控件事件处理函数;
封装单元104,其配置为执行初始化操作,封装并提供接口函数;和
调用单元105,其配置为调用接口函数生成用于页面显示的应用程序;或者开发方调用接口函数并写入自定义代码,生成用于页面显示的应用程序。
在本申请的一个或多个实施方式中,所述应用程序可包括一个或多个主页面;所述代码生成请求以主页面为单位生成。
在本申请的一个或多个实施方式中,所述主页面可包括多个子控件;以子控件为单位,针对每一个子控件,根据预先配置的、基于LVGL的子控件模板和/或开发方提供的子控件配置参数生成子控件代码。
本申请实施例的装置可执行本申请实施例所提供的方法,其实现原理相类似,本申请各实施例的装置中的各模块所执行的动作是与本申请各实施例的方法中的步骤相对应的,对于装置的各模块的详细功能描述以及产生的有益效果具体可以参见前文中所示的对应方法中的描述,此处不再赘述。
本申请实施例中提供了一种电子设备20,包括存储器202、处理器201及存储在存储器202上的计算机程序,该处理器201执行上述计算机程序以实现前述各方法实施例的步骤。
在一个可选实施例中提供了一种电子设备20,如图3所示,图3所示的电子设备20包括:处理器201和存储器202。其中,处理器201和存储器202相连,如通过总线相连。可选地,电子设备20还可以包括通信接口204,通信接口204可以用于该电子设备20与其他电子设备20之间的数据交互,如数据的发送和/或数据的接收等;还包括输入装置203和输出装置205。需要说明的是,实际应用中收发器不限于一个,该电子设备20的结构并不构成对本申请实施例的限定。
处理器201可以是CPU(Central Processing Unit,中央处理器201),通用处理器201,DSP(Digital Signal Processor,数据信号处理器201),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器201也可以是实现计算功能的组合,例如包含一个或多个微处理器201组合,DSP和微处理器201的组合等。
总线可包括一通路,在上述组件之间传送信息。总线可以是PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA (Extended IndustryStandard Architecture,扩展工业标准结构)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图3中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器202可以是ROM(Read Only Memory,只读存储器202)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器202)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器202)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质、其他磁存储设备、或者能够用于携带或存储计算机程序并能够由计算机读取的任何其他介质,在此不做限定。
存储器202用于存储执行本申请实施例的计算机程序,并由处理器201来控制执
行。处理器201用于执行存储器202中存储的计算机程序,以实现前述方法实施例所示的步骤。
其中,电子设备20包括但不限于移动终端、智能终端等,例如智能穿戴设备(例如智能手表等)、移动电话、智能电话、平板电脑、笔记本电脑、个人数字助理、便携式多媒体播放器、导航装置等。本领域技术人员可以理解的是,除了特别用于移动目的的元件之外,根据本公开实施例的构造也能够应用于固定类型的终端,诸如数字电视、台式计算机等。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
以上实施例仅用以说明本发明的技术方案,而非对其进行限制;尽管参照前述实施例对本发明进行了详细的说明,对于本领域的普通技术人员来说,依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或替换,并不使相应技术方案的本质脱离本发明所要求保护的技术方案的精神和范围。

Claims (10)

1.LVGL页面显示代码生成方法,其特征在于,包括以下步骤:
自开发方接收代码生成请求;
响应于所述代码生成请求,根据预先配置的、基于LVGL的页面显示模板和开发方提供的显示功能配置参数生成主页面代码和/或控件代码;在所述页面显示模板中配置有使用LVGL事件系统设置的主页面事件处理函数和/或控件事件处理函数;
根据预先配置的、基于LVGL的子控件模板和开发方提供的子控件配置参数生成子控件代码 ;在所述子控件模板中配置有使用LVGL事件系统设置的子控件事件处理函数;
执行初始化操作,封装并提供接口函数;所述执行初始化操作,封装并提供接口函数的步骤包括:配置初始化函数,所述初始化函数接收初始化参数并用于主页面、控件和子控件的初始化;进一步封装并提供接口函数,所述接口函数为对外的接口函数,在所述接口函数内部可以执行以下步骤:检查传入的参数是否有效;分配内存以存储页面的数据结构;初始化数据结构,并拷贝传入的创建参数,分配内存来存储提示信息的字符串,并将其拷贝到内存中,创建顶级页面对象,如果创建成功,则设置页面的用户数据和删除事件回调函数,初始化页面;
开发方调用接口函数生成用于页面显示的应用程序;或者开发方调用接口函数并写入自定义代码,生成用于页面显示的应用程序。
2.根据权利要求1所述的LVGL页面显示代码生成方法,其特征在于,所述应用程序可包括一个或多个主页面;所述代码生成请求以主页面为单位生成。
3.根据权利要求1所述的LVGL页面显示代码生成方法,其特征在于,所述主页面可包括多个子控件;以子控件为单位,针对每一个子控件,根据预先配置的、基于LVGL的子控件模板和/或开发方提供的子控件配置参数生成子控件代码。
4.根据权利要求1所述的LVGL页面显示代码生成方法,其特征在于,所述主页面事件处理函数包括关闭事件处理函数,所述关闭事件处理函数用于预先配置以释放分配给每一个主页面或控件的数据存储代码;所述页面功能模板中还可包括自定义释放代码。
5.根据权利要求1至4任一项所述的LVGL页面显示代码生成方法,其特征在于,响应于所述代码生成请求,还可根据预先配置的数据管理模板和自定义数据管理代码生成数据管理代码;或者,根据预先配置的自定义事件模板和自定义事件代码生成事件配置代码;或者,根据预先配置的字体配置模板和自定义字体代码生成字体配置代码;或者,根据预先配置的路径管理模板和自定义路径配置代码生成路径管理代码;或者,根据预先配置的皮肤管理模板和自定义皮肤配置代码生成皮肤管理代码;或者,根据预先配置的多语言管理模板和自定义语言配置代码生成多语言管理代码。
6.LVGL页面显示代码生成装置,其特征在于,包括:接收单元,其配置为接收代码生成请求;第一生成单元,其配置为响应于所述代码生成请求,根据预先配置的、基于LVGL的页面显示模板和开发方提供的显示功能配置参数生成主页面代码和/或控件代码;在所述页面显示模板中配置有使用LVGL事件系统设置的主页面事件处理函数和/或控件事件处理函数;
第二生成单元,其配置为根据预先配置的、基于LVGL的子控件模板和开发方提供的子控件配置参数生成子控件代码;在所述子控件模板中配置有使用LVGL事件系统设置的子控件事件处理函数;
封装单元,其配置为执行初始化操作,封装并提供接口函数;所述封装单元配置为执行以下步骤:配置初始化函数,所述初始化函数接收初始化参数并用于主页面、控件和子控件的初始化;进一步封装并提供接口函数,所述接口函数为对外的接口函数,在所述接口函数内部可以执行以下步骤:检查传入的参数是否有效;分配内存以存储页面的数据结构;初始化数据结构,并拷贝传入的创建参数,分配内存来存储提示信息的字符串,并将其拷贝到内存中,创建顶级页面对象,如果创建成功,则设置页面的用户数据和删除事件回调函数,初始化页面;
调用单元,其配置为调用接口函数生成用于页面显示的应用程序;或者开发方调用接口函数并写入自定义代码,生成用于页面显示的应用程序。
7.根据权利要求6所述的LVGL页面显示代码生成装置,其特征在于,所述应用程序可包括一个或多个主页面;所述代码生成请求以主页面为单位生成。
8.根据权利要求6所述的LVGL页面显示代码生成装置,其特征在于,所述主页面可包括多个子控件;以子控件为单位,针对每一个子控件,根据预先配置的、基于LVGL的子控件模板和/或开发方提供的子控件配置参数生成子控件代码。
9.电子设备,其特征在于,包括处理器、通信接口、存储器、输入装置和输出装置;所述处理器、通信接口、存储器、输入装置和输出装置相互连接,其中,所述存储器用于存储计算机程序,所述处理器被配置用于调用所述计算机程序执行如权利要求1至5任一项所述的方法。
10.计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5任一项所述的方法。
CN202410095595.7A 2024-01-24 2024-01-24 Lvgl页面显示代码生成方法、装置、设备及介质 Active CN117608560B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410095595.7A CN117608560B (zh) 2024-01-24 2024-01-24 Lvgl页面显示代码生成方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410095595.7A CN117608560B (zh) 2024-01-24 2024-01-24 Lvgl页面显示代码生成方法、装置、设备及介质

Publications (2)

Publication Number Publication Date
CN117608560A CN117608560A (zh) 2024-02-27
CN117608560B true CN117608560B (zh) 2024-04-12

Family

ID=89946582

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410095595.7A Active CN117608560B (zh) 2024-01-24 2024-01-24 Lvgl页面显示代码生成方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN117608560B (zh)

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109445775A (zh) * 2018-10-12 2019-03-08 平安科技(深圳)有限公司 一键活动内嵌代码方法、装置及计算机可读存储介质
CN112181399A (zh) * 2019-07-03 2021-01-05 营利度富信息系统(上海)有限公司 一种基于数据解析构建模型生成前端代码的方法
CN113835693A (zh) * 2021-09-15 2021-12-24 欧电云信息科技(江苏)有限公司 代码生成方法、装置、电子设备、存储介质
CN114253546A (zh) * 2021-11-19 2022-03-29 青岛海尔科技有限公司 代码的生成方法、装置、存储介质及电子装置
CN114579109A (zh) * 2022-03-18 2022-06-03 上海商汤智能科技有限公司 代码生成方法及装置、电子设备和存储介质
CN115729537A (zh) * 2022-11-30 2023-03-03 中国农业银行股份有限公司 代码生成方法、装置、设备及存储介质
CN115756452A (zh) * 2021-09-03 2023-03-07 北京有竹居网络技术有限公司 目标页面代码的生成方法、设备、存储介质及程序产品
CN115964038A (zh) * 2022-12-30 2023-04-14 浙江金网信息产业股份有限公司 一种基于双模型驱动的低代码开发方法
CN116069300A (zh) * 2022-12-21 2023-05-05 中国电信股份有限公司 工作流控制代码生成方法、装置、电子设备及存储介质
CN116304442A (zh) * 2021-12-21 2023-06-23 北京字节跳动网络技术有限公司 页面代码生成方法、装置、电子设备以及存储介质
CN117234513A (zh) * 2023-11-15 2023-12-15 腾讯科技(深圳)有限公司 页面的数据文件生成方法、装置、电子设备、介质及产品

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7917890B2 (en) * 2006-08-31 2011-03-29 Jon Barcellona Enterprise-scale application development framework utilizing code generation

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109445775A (zh) * 2018-10-12 2019-03-08 平安科技(深圳)有限公司 一键活动内嵌代码方法、装置及计算机可读存储介质
CN112181399A (zh) * 2019-07-03 2021-01-05 营利度富信息系统(上海)有限公司 一种基于数据解析构建模型生成前端代码的方法
CN115756452A (zh) * 2021-09-03 2023-03-07 北京有竹居网络技术有限公司 目标页面代码的生成方法、设备、存储介质及程序产品
CN113835693A (zh) * 2021-09-15 2021-12-24 欧电云信息科技(江苏)有限公司 代码生成方法、装置、电子设备、存储介质
CN114253546A (zh) * 2021-11-19 2022-03-29 青岛海尔科技有限公司 代码的生成方法、装置、存储介质及电子装置
CN116304442A (zh) * 2021-12-21 2023-06-23 北京字节跳动网络技术有限公司 页面代码生成方法、装置、电子设备以及存储介质
CN114579109A (zh) * 2022-03-18 2022-06-03 上海商汤智能科技有限公司 代码生成方法及装置、电子设备和存储介质
CN115729537A (zh) * 2022-11-30 2023-03-03 中国农业银行股份有限公司 代码生成方法、装置、设备及存储介质
CN116069300A (zh) * 2022-12-21 2023-05-05 中国电信股份有限公司 工作流控制代码生成方法、装置、电子设备及存储介质
CN115964038A (zh) * 2022-12-30 2023-04-14 浙江金网信息产业股份有限公司 一种基于双模型驱动的低代码开发方法
CN117234513A (zh) * 2023-11-15 2023-12-15 腾讯科技(深圳)有限公司 页面的数据文件生成方法、装置、电子设备、介质及产品

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Generating Code for Simple Dynamic Web Applications via Routing Configurations;Kajitori, K et al.;《International Journal of Modern Education and Computer Science》;20171130;第9卷(第11期);全文 *
基于业务模型和界面模型的代码生成工具;张晶;黄小锋;;电脑与信息技术;20160415(02);全文 *
嵌入式装置可视化页面程序代码处理架构设计;刘国伟;陈宏君;刘克金;;单片机与嵌入式系统应用;20170501(05);全文 *

Also Published As

Publication number Publication date
CN117608560A (zh) 2024-02-27

Similar Documents

Publication Publication Date Title
JP5798623B2 (ja) 動的入力装置のコンテキスト制御
US8166396B2 (en) User interface rendering
US20110258534A1 (en) Declarative definition of complex user interface state changes
Zukowski The definitive guide to Java Swing
KR20050039551A (ko) 컴퓨터 플랫폼용 프로그래밍 인터페이스
EP2705418A1 (en) Methods to adapt user interfaces and input controls
JP5015330B2 (ja) 統一ルックアンドフィールを提供するbiosグラフィックエンジン
CN117608560B (zh) Lvgl页面显示代码生成方法、装置、设备及介质
Hermes et al. Building Xamarin. Forms Mobile Apps Using XAML: Mobile Cross-Platform XAML and Xamarin. Forms Fundamentals
Smyth Android Studio 3.0 Development Essentials-Android 8 Edition
Dutson Android Development Patterns: Best Practices for Professional Developers
Awwad Localization to bidirectional languages for a visual programming environment on smartphones
Sweet KDE 2.0 Development
Costanich Developing C♯ Apps for IPhone and IPad Using MonoTouch
US20030033332A1 (en) Control/display unit page builder software tool
Hermes et al. Building Apps Using Xamarin
CN111666028B (zh) 创建多页滑动视图的方法、装置、介质及计算机设备
CN117573258A (zh) 车载仪表的人机交互界面管理方法及装置
Zukowski John Zukowski’s Definitive Guide to Swing for Java 2
Perez et al. OFF-PROCESS GUI RENDERING
Mawlood-Yunis Fragments, Dynamic Binding, Inheritance, Pinching, and Screen Swiping
Ghoda et al. Implementing the View
Obert et al. Elementary: Fundamental Library Styles
Chebanyuk et al. Approach Allowing Design Adaptive View Models
Lalonde et al. Windows Phone 8 Recipes: A Problem-Solution Approach

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant