CN113760286A - 一种文件生成方法及电子设备、存储介质 - Google Patents

一种文件生成方法及电子设备、存储介质 Download PDF

Info

Publication number
CN113760286A
CN113760286A CN202110955275.0A CN202110955275A CN113760286A CN 113760286 A CN113760286 A CN 113760286A CN 202110955275 A CN202110955275 A CN 202110955275A CN 113760286 A CN113760286 A CN 113760286A
Authority
CN
China
Prior art keywords
control
program
target
analysis program
target application
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.)
Pending
Application number
CN202110955275.0A
Other languages
English (en)
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.)
Beijing ByteDance Network Technology Co Ltd
Original Assignee
Beijing Jingling Information System 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 Beijing Jingling Information System Technology Co Ltd filed Critical Beijing Jingling Information System Technology Co Ltd
Priority to CN202110955275.0A priority Critical patent/CN113760286A/zh
Publication of CN113760286A publication Critical patent/CN113760286A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • 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
    • 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/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-ins; Add-ons

Abstract

本申请公开了一种文件生成方法及电子设备、存储介质,所述方法包括:将分析程序加载到目标应用程序;利用所述分析程序对所述目标应用程序进行分析,得到所述目标应用程序的控件树;基于所述控件树生成目标源代码,并将所述目标源代码保存为目标文件,其中,所述目标源代码是指具有目标格式的源代码,所述目标文件是指具有目标格式的文件。通过该方法,可以对目标应用程序的界面进行快速克隆。

Description

一种文件生成方法及电子设备、存储介质
技术领域
本申请涉及计算机信息处理技术领域,尤其涉及一种文件生成方法及电子设备、存储介质
背景技术
Qt是一种应用程序开发框架,提供了跨平台类库、集成开发工具和跨平台集成开发环境(Integrated Development Environment,IDE)。通过Qt可以实现应用程序的开发。进一步,通过Qt可以实现跨不同桌面和嵌入式操作系统部署应用程序。通过Qt开发的应用程序称为Qt应用程序。
个人计算机(Personal Computer,PC)采用QWidget工具编写Qt应用程序。然而,随着移动设备的蓬勃发展,一方面,需要将QWidget工具编写的Qt应用程序使用Qt Quick工具重新开发,以及需要使用qml工具对QWidget编写的用户界面(User Interface,UI)重新编写;另一方面,有时需要借鉴Qt Quick应用程序的UI,将qml文件编入Qt Quick应用程序的二进制文件。为此,需要开发工程师按照目前Qt应用程序的UI,使用qml工具重新对其进行编写,枯燥且重复,耗费大量人工。
发明内容
为解决上述技术问题,本申请实施例提供了一种文件生成方法及电子设备、计算机可读存储介质。
本申请实施例提供的文件生成方法,包括:
将分析程序加载到目标应用程序;
利用所述分析程序对所述目标应用程序进行分析,得到所述目标应用程序的控件树;
基于所述控件树生成目标源代码,并将所述目标源代码保存为目标文件,其中,所述目标源代码是指具有目标格式的源代码,所述目标文件是指具有目标格式的文件。
本申请实施例提供的文件生成装置,包括:
加载单元,用于将分析程序加载到目标应用程序;
分析单元,用于利用所述分析程序对所述目标应用程序进行分析,得到所述目标应用程序的控件树;
生成单元,用于基于所述控件树生成目标源代码;
保存单元,用于将所述目标源代码保存为目标文件;
其中,所述目标源代码是指具有目标格式的源代码,所述目标文件是指具有目标格式的文件。
本申请实施例提供的电子设备,包括:处理器和存储器,该存储器用于存储计算机程序,所述处理器用于调用并运行所述存储器中存储的计算机程序,执行上述任意一种文件生成方法。
本申请实施例提供的计算机可读存储介质,其存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一种文件生成方法。
本申请实施例的技术方案中,将分析程序加载到目标应用程序,即可通过分析程序自动对目标应用程序进行分析,从而得到目标应用程序的当前界面的目标源代码,将该目标源代码保存为目标文件,该目标文件即为通过目标格式编写的界面的文件,从而实现了界面的快速编写。相比现有技术,本申请实施例的技术方案无需对界面重新编写,节省了大量人工成本,此外,还提高了界面还原的准确性。
附图说明
图1是本申请实施例提供的文件生成方法的流程示意图;
图2是本申请实施例提供的UI界面中的控件的示意图;
图3是本申请实施例提供的控件数的结构图;
图4是本申请实施例提供的基于运行中的Qt应用程序生成qml文件的方法的流程示意图一;
图5是本申请实施例提供的基于运行中的Qt应用程序生成qml文件的方法的流程示意图二;
图6是本申请实施例提供的文件生成装置的结构组成示意图;
图7是本申请实施例提供的一种电子设备示意性结构图;
图8是本申请实施例的芯片的示意性结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例中,术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本申请实施例中,字符“/”,一般表示前后关联对象是一种“或”的关系。
应理解,在本申请的实施例中提到的“指示”可以是直接指示,也可以是间接指示,还可以是表示具有关联关系。举例说明,A指示B,可以表示A直接指示B,例如B可以通过A获取;也可以表示A间接指示B,例如A指示C,B可以通过C获取;还可以表示A和B之间具有关联关系。
在本申请实施例的描述中,术语“对应”可表示两者之间具有直接对应或间接对应的关系,也可以表示两者之间具有关联关系,也可以是指示与被指示、配置与被配置等关系。
为便于理解本申请实施例的技术方案,以下通过具体实施例详述本申请的技术方案。以上相关技术作为可选方案与本申请实施例的技术方案可以进行任意结合,其均属于本申请实施例的保护范围。本申请实施例包括以下内容中的至少部分内容。
以下对本申请实施例中的关键技术术语进行说明。
Qt应用程序:Qt应用程序是通过Qt开发的应用程序。这里,Qt是一种跨平台C++图形用户界面(Graphical User Interface,GUI)应用程序的开发框架。Qt应用程序也可以称为Qt GUI应用程序。
Qt Quick:Qt Quick是Qt提供的一种高级用户界面技术,通过Qt Quick可以为移动设备创建UI。Qt Quick提供基于qml工具创建UI所有必要的基础类型。Qml工具提供qml引擎和语言解析基础。
QObject:QObject是Qt所有类的基类。绝大部分的Qt类都是从QObject继承而来。
自省:自省是面向对象语言的一种在运行期间查询对象信息的能力。
图1是本申请实施例提供的文件生成方法的流程示意图,如图1所示,所述文件生成方法包括以下步骤:
步骤101:将分析程序加载到目标应用程序。
本申请实施例中,所述分析程序也可以称为解析程序或者分析转换程序或者分析工具或者解析工具或者分析转换工具。本申请对分析程序的名称不做限定。
本申请实施例中,所述目标应用程序是Qt应用程序。Qt应用程序内部使用控件树组织控件的层次和位置关系。作为示例,如图2所示UI界面,Qt应用程序的UI界面(即一个窗口的界面)使用图2所示的控件树构建。控件1有两个子控件,分别是控件2和控件3;控件2有一个子控件,为控件4。控件3有两个子控件,分别是控件5和子件6。这里,控件1是根控件。
运行中的Qt应用程序的UI界面对应的控件树如图3所示,分析程序加载到Qt应用程序中,对Qt应用程序进行分析,可以得到对应的控件树的信息。
在一些可选实施方式中,所述目标应用程序为Qt Quick应用程序。在另一些可选实施方式中,所述目标应用程序为QWidget应用程序。这里,Qt Quick应用程序是指用QtQuick工具编写的应用程序。QWidget应用程序是指用QWidget工具编写的应用程序。需要说明的是,Qt应用程序是一种二进制程序。
本申请实施例中,所述分析程序包括动态链接库。将所述分析程序的动态链接库加载到目标应用程序。进一步,将所述分析程序的动态链接库加载到运行中的目标应用程序,如此,动态链接库会被加载到Qt应用程序的进程空间中。这里,运行中的目标应用程序会显示对应的界面。
需要说明的是,将分析程序加载到目标应用程序,也可以描述成,将分析程序注入到目标应用程序,或者,将分析程序附着(attach)到目标应用程序,其含义均是相同的。
本申请实施例中,将所述分析程序的动态链接库加载到目标应用程序的方式可以有很多种,以下列举两种方式,需要说明的是,本申请并不局限于以下两种方式。
方式一:使用调试器将所述分析程序的动态链接库加载到目标应用程序。
例如:通过调试器使用gdb命令调用dlopen函数将分析程序的动态链接库加载到目标应用程序。
方式二:使用动态链接器将所述分析程序的动态链接库加载到目标应用程序。
例如:使用动态链接器采用预加载(preload)的方式将分析程序的动态链接库加载到目标应用程序。
步骤102:利用所述分析程序对所述目标应用程序进行分析,得到所述目标应用程序的控件树。
本申请实施例中,所述利用所述分析程序对所述目标应用程序进行分析,得到所述目标应用程序的控件树,可以通过以下步骤来实现:
步骤1)利用所述分析程序查找所述目标应用程序显示的至少一个窗口,所述至少一个窗口中的每个窗口与一个控件树对应;
步骤2)利用所述分析程序确定所述至少一个窗口对应的控件树。
以下结合目标应用程序的不同实现,对如何生成目标应用程序的控件树进行说明。
方案一
本申请实施例中,所述目标应用程序为运行中的Qt Quick应用程序。这里,QtQuick应用程序可以提供以下一种或多种方法:allWindows方法、topLevelWindows方法、focusWindow方法、QQuickWindow的contentItem方法。这些方法的作用将在以下相关方案中描述。
这里,allWindows方法、topLevelWindows方法以及focusWindow方法属于类型为QG uiApplication的全局变量qApp的方法。
对于上述步骤1),可以通过以下方式来实现:利用所述分析程序调用allWindows方法查找所述目标应用程序显示的全部窗口;或者,利用所述分析程序调用topLevelWindows方法查找所述目标应用程序显示的全部顶层窗口;或者,利用所述分析程序调用focusWindow方法查找所述目标应用程序显示的焦点窗口;其中,所述allWindows方法、所述topLevelWindows方法以及所述focusWindow方法为所述Qt Quick应用程序提供的方法。
对于上述步骤2),可以通过以下方式来实现:利用所述分析程序调用QQuickWindow的contentItem方法遍历所述至少一个窗口,得到对应的Qt Quick控件树,所述Qt Quick控件树包括至少一个Qt Quick控件;其中,所述QQuickWindow的contentItem方法为所述Qt Quick应用程序提供的方法。
这里,需要说明的是,使用QQuickWindow的contentItem方法可以遍历找到控件树的全部控件。
在一些可选实施方式中,利用所述分析程序确定所述控件树中的至少部分控件的控件属性,其中,所述控件属性用于确定控件之间的关联关系,所述控件属性还用于所述控件树的确定。具体地,利用所述分析程序调用QObject的自省能力,获取所述控件树中的至少部分控件的控件属性。
作为示例:分析程序调用QObject的自省能力查找控件的控件属性,基于控件的控件属性确定该控件是否为根控件。在确定出根控件后,可以根据根控件找到控件树的其他控件,最终查找出控件树的全部控件。
方案二
本申请实施例中,所述目标应用程序为运行中的QWidget应用程序。这里,QWidget应用程序可以提供以下一种或多种方法:allWidgets方法、topLevelWidgets方法、focusWidget方法、QObject的children方法。这些方法的作用将在以下相关方案中描述。
这里,allWidgets方法、topLevelWidgets方法以及focusWidget方法属于类型为QApplication的全局变量qApp的方法。
对于上述步骤1),可以通过以下方式来实现:利用所述分析程序调用allWidgets方法查找所述目标应用程序显示的全部窗口;或者,利用所述分析程序调用topLevelWidgets方法查找所述目标应用程序显示的全部顶层窗口;或者,利用所述分析程序调用focusWidget方法查找所述目标应用程序显示的焦点窗口;其中,所述allWidgets方法、所述topLevelWidgets方法以及所述focusWidget方法为所述QWidget应用程序提供的方法。
对于上述步骤2),可以通过以下方式来实现:利用所述分析程序调用QObject的children方法遍历所述至少一个窗口,得到对应的QWidget控件树,所述QWidget控件树包括至少一个QWidget控件;其中,所述QObject的children方法为所述QWidget应用程序提供的方法;基于控件映射关系表,将所述QWidget控件树映射为Qt Quick控件树,其中,所述控件映射关系表用于表述QWidget控件和Qt Quick控件之间的映射关系。
这里,需要说明的是,QWidget的父类为QObject,使用QObject的children方法可以遍历找到控件树的全部控件。
进一步,在一些可选实施方式中,利用所述分析程序确定所述控件树中的至少部分控件的控件属性,其中,所述控件属性用于确定控件之间的关联关系,所述控件属性还用于所述控件树的确定。具体地,利用所述分析程序调用QObject的自省能力,获取所述控件树中的至少部分控件的控件属性。
作为示例:分析程序调用QObject的自省能力查找控件的控件属性,基于控件的控件属性确定该控件是否为根控件。在确定出根控件后,可以根据根控件找到控件树的其他控件,最终查找出控件树的全部控件。
需要说明的是,由于目标应用程序是QWidget应用程序,因而通过QObject查找到的控件树为QWidget控件树,需要将QWidget控件树映射(也即转换、翻译)成Qt Quick控件树。可以使用预先定义的QWidget控件到Qt Quick控件的映射关系表,将QWidget控件树映射成Qt Quick控件树。这里,通过预定义的QWidget控件到Qt Quick控件的映射关系表,解决了QWidget控件树到Qt Quick控件树的自动化转换问题。
步骤103:基于所述控件树生成目标源代码,并将所述目标源代码保存为目标文件,其中,所述目标源代码是指具有目标格式的源代码,所述目标文件是指具有目标格式的文件。
本申请实施例中,通过上述步骤102得到的控件树为Qt Quick控件树,对所述QtQuick控件树进行翻译成qml源代码,所述qml源代码是指具有qml格式的源代码;而后,将所述qml源代码保存为qml文件,所述qml文件是指具有qml格式的文件。
本申请实施例的技术方案,将分析程序加载到运行中的Qt应用程序(如Qt Quick应用程序或QWidget应用程序),通过分析程序对Qt应用程序进行分析从而得到Qt应用程序的控件树,将控件树翻译形成qml语言并保存成qml文件,从而实现了从运行中的Qt应用程序中逆向生成qml文件。采用本申请实施例的技术方案,可以Qt应用程序的界面的全部或者局部进行快速克隆。
以下结合具体应用实例对本申请实施例的技术方案进行举例说明。
应用实例一
图4是本申请实施例提供的基于运行中的Qt应用程序生成qml文件的方法的流程示意图一,如图4所示,所述方法包括以下步骤:
步骤401:将分析程序加载到Qt Quick应用程序。
这里,分析程序被加载到待分析的Qt应用程序的进程空间中,分析程序是一个动态链接库。
在一些可选实施方式中,可以使用调试器将分析程序加载到Qt Quick应用程序。
在一些可选实施方式中,可以使用动态链接器将分析程序加载到Qt Quick应用程序。
步骤402:通过分析程序查找Qt Quick应用程序的UI界面中显示的窗口。
在一些可选实施方式中,可以调用allWindows方法查找Qt Quick应用程序的所有窗口。
在一些可选实施方式中,可以调用topLevelWindows方法查找Qt Quick应用程序的所有顶层窗口。
在一些可选实施方式中,可以调用focusWindow方法查找Qt Quick应用程序的焦点窗口。
这里,allWindows方法、topLevelWindows方法以及focusWindow方法属于类型为QG uiApplication的全局变量qApp的方法。
步骤403:通过分析程序对UI界面中显示的窗口进行分析,确定对应的Qt Quick控件树。
这里,UI界面中的每个窗口都对应一个控件。以图2为例,UI界面包括6个控件,分别为控件1、控件2、控件3、控件4、控件5和控件6。使用QQuickWindow的contentItem方法对所有的窗口进行遍历,确定出如图3所示的控件树。
步骤404:通过分析程序调用QObject的自省功能获取控件的属性。
这里,控件的属性用于描述控件之间的关联关系,通过控件的属性可以确定出该控件是否为根控件,进而可以根据根控件确定出控件树。
需要说明的是,本申请不限定步骤404和步骤403的执行先后顺序,步骤404和步骤403可以同时执行,也可以先执行步骤403再执行步骤404,或者先执行步骤404再执行步骤403。
步骤405:将Qt Quick控件树翻译成qml源代码。
步骤406:将qml源代码保存至qml文件。
应用实例二
图5是本申请实施例提供的基于运行中的Qt应用程序生成qml文件的方法的流程示意图二,如图5所示,所述方法包括以下步骤:
步骤501:将分析程序加载到QWidget应用程序。
这里,分析程序被加载到待分析的Qt应用程序的进程空间中,分析程序是一个动态链接库。
在一些可选实施方式中,可以使用调试器将分析程序加载到QWidget应用程序。
在一些可选实施方式中,可以使用动态链接器将分析程序加载到QWidget应用程序。
步骤502:通过分析程序查找QWidget应用程序的UI界面中显示的窗口。
在一些可选实施方式中,可以调用allWidgets方法查找QWidget应用程序的所有窗口。
在一些可选实施方式中,可以调用topLevelWidgets方法查找QWidget应用程序的所有顶层窗口。
在一些可选实施方式中,可以调用focusWidget方法查找QWidget应用程序的焦点窗口。
这里,allWidgets方法、topLevelWidgets方法以及focusWidget方法属于类型为QApplication的全局变量qApp的方法。
步骤503:通过分析程序对UI界面中显示的窗口进行分析,确定对应的QWidget控件树。
这里,UI界面中的每个窗口都对应一个控件。以图2为例,UI界面包括6个控件,分别为控件1、控件2、控件3、控件4、控件5和控件6。QWidget的父类为QObject,使用QObject的children方法对所有的窗口进行遍历,确定出如图3所示的控件树。
步骤504:通过分析程序调用QObject的自省功能获取控件的属性。
这里,控件的属性用于描述控件之间的关联关系,通过控件的属性可以确定出该控件是否为根控件,进而可以根据根控件确定出控件树。
需要说明的是,本申请不限定步骤504和步骤503的执行先后顺序,步骤504和步骤503可以同时执行,也可以先执行步骤503再执行步骤504,或者先执行步骤504再执行步骤503。
步骤505:使用预定义的映射关系表,将QWidget控件树映射成Qt Quick控件树。
这里,映射关系表用于描述QWidget控件到Qt Quick控件的映射关系,通过该映射关系表,可以将QWidget控件树映射成Qt Quick控件树。
步骤506:将Qt Quick控件树翻译成qml源代码。
步骤507:将qml源代码保存至qml文件。
本申请实施例的技术方案提供了一种基于Qt应用程序生成qml源代码的方法。对于运行中的Qt应用程序,会显示需要分析的UI界面,将分析程序加载到Qt应用程序中,可以自动生成该UI界面对于的qml文件。相比现有的整个UI界面需要开发工程师重新编写的方法,本申请的方法即节省了大量人工成本,又提高了UI界面还原的准确性。
图6是本申请实施例提供的文件生成装置的结构组成示意图,应用于电子设备,如图6所示,所述文件生成装置包括:
加载单元601,用于将分析程序加载到目标应用程序;
分析单元602,用于利用所述分析程序对所述目标应用程序进行分析,得到所述目标应用程序的控件树;
生成单元603,用于基于所述控件树生成目标源代码;
保存单元604,用于将所述目标源代码保存为目标文件;
其中,所述目标源代码是指具有目标格式的源代码,所述目标文件是指具有目标格式的文件。
在一些可选实施方式中,所述分析程序包括动态链接库;所述加载单元601,用于将所述分析程序的动态链接库加载到目标应用程序。
在一些可选实施方式中,所述加载单元601,用于使用调试器将所述分析程序的动态链接库加载到目标应用程序;或者,使用动态链接器将所述分析程序的动态链接库加载到目标应用程序。
在一些可选实施方式中,所述分析单元602,具体用于利用所述分析程序查找所述目标应用程序显示的至少一个窗口,所述至少一个窗口中的每个窗口与一个控件树对应;利用所述分析程序确定所述至少一个窗口对应的控件树。
在一些可选实施方式中,所述目标应用程序为运行中的Qt Quick应用程序。
在一些可选实施方式中,所述分析单元602,具体用于:
利用所述分析程序调用allWindows方法查找所述目标应用程序显示的全部窗口;或者,
利用所述分析程序调用topLevelWindows方法查找所述目标应用程序显示的全部顶层窗口;或者,
利用所述分析程序调用focusWindow方法查找所述目标应用程序显示的焦点窗口;
其中,所述allWindows方法、所述topLevelWindows方法以及所述focusWindow方法为所述Qt Quick应用程序提供的方法。
在一些可选实施方式中,所述分析单元602,具体用于:
利用所述分析程序调用QQuickWindow的contentItem方法遍历所述至少一个窗口,得到对应的Qt Quick控件树,所述Qt Quick控件树包括至少一个Qt Quick控件;
其中,所述QQuickWindow的contentItem方法为所述Qt Quick应用程序提供的方法。
在一些可选实施方式中,所述目标应用程序为运行中的QWidget应用程序。
在一些可选实施方式中,所述分析单元602,具体用于:
利用所述分析程序调用allWidgets方法查找所述目标应用程序显示的全部窗口;或者,
利用所述分析程序调用topLevelWidgets方法查找所述目标应用程序显示的全部顶层窗口;或者,
利用所述分析程序调用focusWidget方法查找所述目标应用程序显示的焦点窗口;
其中,所述allWidgets方法、所述topLevelWidgets方法以及所述focusWidget方法为所述QWidget应用程序提供的方法。
在一些可选实施方式中,所述分析单元602,具体用于:
利用所述分析程序调用QObject的children方法遍历所述至少一个窗口,得到对应的QWidget控件树,所述QWidget控件树包括至少一个QWidget控件;其中,所述QObject的children方法为所述QWidget应用程序提供的方法;
基于控件映射关系表,将所述QWidget控件树映射为Qt Quick控件树,其中,所述控件映射关系表用于表述QWidget控件和Qt Quick控件之间的映射关系。
在一些可选实施方式中,所述生成单元603,具体用于对所述Qt Quick控件树进行翻译,得到qml源代码,所述qml源代码是指具有qml格式的源代码;
所述保存单元604,具体用于将所述qml源代码保存为qml文件,所述qml文件是指具有qml格式的文件。
在一些可选实施方式中,所述分析单元602,还用于利用所述分析程序确定所述控件树中的至少部分控件的控件属性,其中,所述控件属性用于确定控件之间的关联关系,所述控件属性还用于所述控件树的确定。
在一些可选实施方式中,所述分析单元602,具体用于利用所述分析程序调用QObject的自省能力,获取所述控件树中的至少部分控件的控件属性。
本领域技术人员应当理解,图6所示的文件生成装置中的各单元的实现功能可参照前述文件生成方法的相关描述而理解。图6所示的文件生成装置中的各单元的功能可通过运行于处理器上的程序而实现,也可通过具体的逻辑电路而实现。
图7是本申请实施例提供的一种电子设备700示意性结构图。该电子设备可以是手机、平板电脑、穿戴式设备等。图7所示的电子设备700包括处理器710,处理器710可以从存储器中调用并运行计算机程序,以实现本申请实施例中的方法。
可选地,如图7所示,电子设备700还可以包括存储器720。其中,处理器710可以从存储器720中调用并运行计算机程序,以实现本申请实施例中的方法。
可选地,如图7所示,电子设备700还可以包括收发器730,处理器710可以控制该收发器730与其他设备进行通信,具体地,可以向其他设备发送信息或数据,或接收其他设备发送的信息或数据。
图8是本申请实施例的芯片的示意性结构图。图8所示的芯片800包括处理器810,处理器810可以从存储器中调用并运行计算机程序,以实现本申请实施例中的方法。
可选地,如图8所示,芯片800还可以包括存储器820。其中,处理器810可以从存储器820中调用并运行计算机程序,以实现本申请实施例中的方法。
其中,存储器820可以是独立于处理器810的一个单独的器件,也可以集成在处理器810中。
可选地,该芯片800还可以包括输入接口830。其中,处理器810可以控制该输入接口830与其他设备或芯片进行通信,具体地,可以获取其他设备或芯片发送的信息或数据。
可选地,该芯片800还可以包括输出接口840。其中,处理器810可以控制该输出接口840与其他设备或芯片进行通信,具体地,可以向其他设备或芯片输出信息或数据。
应理解,本申请实施例提到的芯片还可以称为系统级芯片,系统芯片,芯片系统或片上系统芯片等。
应理解,本申请实施例的处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法实施例的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
可以理解,本申请实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data RateSDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(DirectRambus RAM,DR RAM)。应注意,本文描述的系统和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
本申请实施例还提供了一种计算机可读存储介质,用于存储计算机程序。
可选的,该计算机可读存储介质可应用于本申请实施例中的网络设备,并且该计算机程序使得计算机执行本申请实施例的各个方法中由网络设备实现的相应流程,为了简洁,在此不再赘述。
可选地,该计算机可读存储介质可应用于本申请实施例中的移动终端/终端设备,并且该计算机程序被处理器执行时实现本申请实施例的各个方法中由移动终端/终端设备实现的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种计算机程序产品,包括计算机程序指令。
可选的,该计算机程序产品可应用于本申请实施例中的网络设备,并且该计算机程序指令被处理器执行时实现本申请实施例的各个方法中由网络设备实现的相应流程,为了简洁,在此不再赘述。
可选地,该计算机程序产品可应用于本申请实施例中的移动终端/终端设备,并且该计算机程序指令被处理器执行时实现本申请实施例的各个方法中由移动终端/终端设备实现的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种计算机程序。
可选的,该计算机程序可应用于本申请实施例中的网络设备,当该计算机程序在计算机上运行时,使得计算机执行本申请实施例的各个方法中由网络设备实现的相应流程,为了简洁,在此不再赘述。
可选地,该计算机程序可应用于本申请实施例中的移动终端/终端设备,当该计算机程序在计算机上运行时,使得计算机执行本申请实施例的各个方法中由移动终端/终端设备实现的相应流程,为了简洁,在此不再赘述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,)ROM、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

Claims (15)

1.一种文件生成方法,其特征在于,所述方法包括:
将分析程序加载到目标应用程序;
利用所述分析程序对所述目标应用程序进行分析,得到所述目标应用程序的控件树;
基于所述控件树生成目标源代码,并将所述目标源代码保存为目标文件,其中,所述目标源代码是指具有目标格式的源代码,所述目标文件是指具有目标格式的文件。
2.根据权利要求1所述的方法,其特征在于,所述分析程序包括动态链接库;
所述将分析程序加载到目标应用程序,包括:
将所述分析程序的动态链接库加载到目标应用程序。
3.根据权利要求2所述的方法,其特征在于,将所述分析程序的动态链接库加载到目标应用程序,包括:
使用调试器将所述分析程序的动态链接库加载到目标应用程序;或者,
使用动态链接器将所述分析程序的动态链接库加载到目标应用程序。
4.根据权利要求1所述的方法,其特征在于,所述利用所述分析程序对所述目标应用程序进行分析,得到所述目标应用程序的控件树,包括:
利用所述分析程序查找所述目标应用程序显示的至少一个窗口,所述至少一个窗口中的每个窗口与一个控件树对应;
利用所述分析程序确定所述至少一个窗口对应的控件树。
5.根据权利要求4所述的方法,其特征在于,所述目标应用程序为运行中的Qt Quick应用程序。
6.根据权利要求5所述的方法,其特征在于,所述利用所述分析程序查找所述目标应用程序显示的至少一个窗口,包括:
利用所述分析程序调用allWindows方法查找所述目标应用程序显示的全部窗口;或者,
利用所述分析程序调用topLevelWindows方法查找所述目标应用程序显示的全部顶层窗口;或者,
利用所述分析程序调用focusWindow方法查找所述目标应用程序显示的焦点窗口;
其中,所述allWindows方法、所述topLevelWindows方法以及所述focusWindow方法为所述Qt Quick应用程序提供的方法。
7.根据权利要求5所述的方法,其特征在于,所述利用所述分析程序确定所述至少一个窗口对应的控件树,包括:
利用所述分析程序调用QQuickWindow的contentItem方法遍历所述至少一个窗口,得到对应的Qt Quick控件树,所述Qt Quick控件树包括至少一个Qt Quick控件;
其中,所述QQuickWindow的contentItem方法为所述Qt Quick应用程序提供的方法。
8.根据权利要求4所述的方法,其特征在于,所述目标应用程序为运行中的QWidget应用程序。
9.根据权利要求8所述的方法,其特征在于,所述利用所述分析程序查找所述目标应用程序显示的至少一个窗口,包括:
利用所述分析程序调用allWidgets方法查找所述目标应用程序显示的全部窗口;或者,
利用所述分析程序调用topLevelWidgets方法查找所述目标应用程序显示的全部顶层窗口;或者,
利用所述分析程序调用focusWidget方法查找所述目标应用程序显示的焦点窗口;
其中,所述allWidgets方法、所述topLevelWidgets方法以及所述focusWidget方法为所述QWidget应用程序提供的方法。
10.根据权利要求8所述的方法,其特征在于,所述利用所述分析程序确定所述至少一个窗口对应的控件树,包括:
利用所述分析程序调用QObject的children方法遍历所述至少一个窗口,得到对应的QWidget控件树,所述QWidget控件树包括至少一个QWidget控件;其中,所述QObject的children方法为所述QWidget应用程序提供的方法;
基于控件映射关系表,将所述QWidget控件树映射为Qt Quick控件树,其中,所述控件映射关系表用于表述QWidget控件和Qt Quick控件之间的映射关系。
11.根据权利要求7或10所述的方法,其特征在于,所述基于所述控件树生成目标源代码,并将所述目标源代码保存为目标文件,包括:
对所述Qt Quick控件树进行翻译,得到qml源代码,所述qml源代码是指具有qml格式的源代码;
将所述qml源代码保存为qml文件,所述qml文件是指具有qml格式的文件。
12.根据权利要求1至10中任一项所述的方法,其特征在于,所述方法还包括:
利用所述分析程序确定所述控件树中的至少部分控件的控件属性,其中,所述控件属性用于确定控件之间的关联关系,所述控件属性还用于所述控件树的确定。
13.根据权利要求5所述的方法,其特征在于,所述利用所述分析程序确定所述控件树中的至少部分控件的控件属性,包括:
利用所述分析程序调用QObject的自省能力,获取所述控件树中的至少部分控件的控件属性。
14.一种电子设备,其特征在于,包括:处理器和存储器,该存储器用于存储计算机程序,所述处理器用于调用并运行所述存储器中存储的计算机程序,执行如权利要求1至13中任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,其存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至13中任一项所述的方法。
CN202110955275.0A 2021-08-19 2021-08-19 一种文件生成方法及电子设备、存储介质 Pending CN113760286A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110955275.0A CN113760286A (zh) 2021-08-19 2021-08-19 一种文件生成方法及电子设备、存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110955275.0A CN113760286A (zh) 2021-08-19 2021-08-19 一种文件生成方法及电子设备、存储介质

Publications (1)

Publication Number Publication Date
CN113760286A true CN113760286A (zh) 2021-12-07

Family

ID=78790484

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110955275.0A Pending CN113760286A (zh) 2021-08-19 2021-08-19 一种文件生成方法及电子设备、存储介质

Country Status (1)

Country Link
CN (1) CN113760286A (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111414215A (zh) * 2019-01-07 2020-07-14 比亚迪股份有限公司 人机界面生成方法、装置及存储介质
CN111752666A (zh) * 2020-06-30 2020-10-09 杭州海康威视数字技术股份有限公司 窗口显示方法、装置和终端
CN112799669A (zh) * 2021-04-06 2021-05-14 武汉元光科技有限公司 应用程序界面布局代码的生成方法、装置及电子设备

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111414215A (zh) * 2019-01-07 2020-07-14 比亚迪股份有限公司 人机界面生成方法、装置及存储介质
CN111752666A (zh) * 2020-06-30 2020-10-09 杭州海康威视数字技术股份有限公司 窗口显示方法、装置和终端
CN112799669A (zh) * 2021-04-06 2021-05-14 武汉元光科技有限公司 应用程序界面布局代码的生成方法、装置及电子设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
朱红英等: "嵌入式系统界面设计工具在开发环境中的实现", 《计算机工程》, pages 277 - 279 *

Similar Documents

Publication Publication Date Title
CN107644286B (zh) 工作流处理方法及装置
US20190004774A1 (en) Automated source code adaption to inject features between platform versions
CN107832059B (zh) 一种基于Makefile的代码静态分析方法和装置
CN107015841B (zh) 一种程序编译的预处理方法及程序编译设备
CN112733158B (zh) Android系统漏洞检测方法、电子设备及存储介质
CN111638873A (zh) 程序代码的生成方法、装置、计算机设备及存储介质
CN110609687A (zh) 一种编译方法、装置、电子设备和存储介质
CN108563694B (zh) 对逻辑删除的sql执行方法、装置、计算机设备和存储介质
CN111985055A (zh) 一种模型封装方法、装置及电子设备
KR20080039080A (ko) 이종언어편집 라이브러리의 인터페이스 기능이 구비된단말장비, api호출방법 및 컴파일함수생성방법
CN114547024A (zh) 一种sql语句风险检测方法、装置、设备及介质
CN112328219A (zh) 业务访问处理方法、装置、系统和计算机设备
US11042421B1 (en) Modifying system-defined user interface control functionality on a computing device
CN111159301A (zh) 一种基于智能合约的数据创建方法、装置、设备及存储介质
US9117017B2 (en) Debugger with previous version feature
US8769498B2 (en) Warning of register and storage area assignment errors
CN112306533A (zh) 前端框架自动转换方法、装置、计算机设备及存储介质
TWI501152B (zh) 用於簡化具有動態程式庫的介面之方法
CN111078217A (zh) 脑图生成方法、装置和计算机可读存储介质
CN113760286A (zh) 一种文件生成方法及电子设备、存储介质
CN107562423B (zh) Ui页面开发方法及装置
CN114356779A (zh) 编程语言调试方法、装置及终端设备
CN113742223A (zh) 标识控件的方法及装置、电子设备、存储介质
KR101476536B1 (ko) 프로그램 검수 방법 및 시스템
CN112068814A (zh) 可执行文件的生成方法、装置、系统及介质

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
TA01 Transfer of patent application right

Effective date of registration: 20220330

Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant after: BEIJING BYTEDANCE NETWORK TECHNOLOGY Co.,Ltd.

Address before: 2005, floor 2, No. 39, West Street, Haidian District, Beijing 100080

Applicant before: Beijing jingling Information System Technology Co.,Ltd.

TA01 Transfer of patent application right