CN102799581B - 一种实现跨平台图形库的***及方法 - Google Patents
一种实现跨平台图形库的***及方法 Download PDFInfo
- Publication number
- CN102799581B CN102799581B CN201110133570.4A CN201110133570A CN102799581B CN 102799581 B CN102799581 B CN 102799581B CN 201110133570 A CN201110133570 A CN 201110133570A CN 102799581 B CN102799581 B CN 102799581B
- Authority
- CN
- China
- Prior art keywords
- platform
- library
- function
- api function
- cross
- 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
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种实现跨平台图形库的***及方法,用于信息技术领域,以针对现有技术中跨平台图形库不适用于嵌入式***开发的不足,提出一种新的跨平台图形库,为使用该图形库的开发者提供一套完整且统一的开发接口,并适用于针对不同的***平台,使得图形库能调用基于该平台的原生图形库函数。所述***包括:平***立层,用来为用户提供开发接口API函数;平台相关层,用来与所述平***立层的所述API函数进行对接,并与特定平台的原生态图形库函数进行交互。本发明实施例的图形库***十分轻量,适合嵌入式设备开发使用;同时扩展方便,很容易添加新的***平台。
Description
技术领域
本发明涉及一种信息技术领域,尤其涉及一种实现跨平台图形库的***及方法.
背景技术
在用编程语言工具开发跨平台的应用程序时,经常遇到应用程序需要为不同的平台编写针对该平台的代码,最突出的代表便是编写图形用户接口(简称GUI)代码。如果GUI需求一旦发生变化,所有平台的相关代码都需要做相应的修改。这样不仅耗时耗力,同时又容易出错,代码的管理也会受到影响,从此会降低开发效率。一种解决该问题的方法是使用跨平台的图形库接口来开发跨平台的应用程序,跨平台图形库对开发者提供统一的编程接口,同时在具体实现上根据操作***的不同从而进行不同的实现。
以C++为例,目前有很多以C++为开发语言的跨平台图形库,其中典型的代表有Qt和wxWidget。Qt是跨平台的C++类库,能够在Windows、Linux等主流平台上使用。Qt除了包含图形库之外,还提供了跨平台的基础库,如数组、堆栈或线程等。wxWidget也是针对不同平台设计的图形类库,wxWidget的设计和使用风格与MFC相似,有所不同的便是wxWidget可以运行在不同的***平台。无论是Qt还是wxWidget,其复杂程度高不适合运用于资源有限的嵌入式设备。Trixul也是用C++编写的跨平台图形库,Trixul采用了Mozilla的JavaScript引擎技术将C++代码与JavaScript代码进行融合,简化了图形设计的复杂性。不足之处Trixul需要JS引擎支持方能实现交互,这在普通应用程序设计中不是必须的。
发明内容
本发明的目的是针对现有技术中跨平台图形库不适用于嵌入式***开发的不足,提出一种新的跨平台图形库,为使用该图形库的开发者提供一套完整且统一的开发接口,并适用于针对不同的***平台,使得图形库能调用基于该平台的原生图形库函数。
为了达到上述发明目的,本发明提出了一种实现跨平台图形库的***,所述***是通过以下的技术方案实现的:
一种实现跨平台图形库的***,所述***包括:
平***立层,用来为用户提供开发接口API函数;
平台相关层,用来与所述平***立层的所述API函数进行对接,并与特定平台的原生态图形库函数进行交互。
进一步优选地,所述平台相关层具体包括:
API函数实现模块,用来与所述平***立层的相应API函数进行对接,实现API函数的调用功能;
平台通信模块,用来与所述特定平台的原生态图形库函数进行交互,接收由原生态图形库控件反馈回来的信号和事件,为用户实现API函数调用提供接口。
为了实现前述发明目的,本发明实施例还提供了一种实现跨平台图形库的方法,所述方法包括以下步骤:
当用户进行图形开发的API函数调用时,平***立层提供一相应API函数调用接口;
平台相关层根据所述API函数与平***立层进行对接,并与特定平台的原生态图形库函数进行交互。
进一步优选地,所述平台相关层根据所述API函数与平***立层进行对接,并与特定平台的原生态图形库函数进行交互具体包括:
平台相关层与所述平***立层的相应API函数进行对接,实现API函数的调用功能;
平台相关层与所述特定平台的原生态图形库函数进行交互,接收由原生态图形库控件反馈回来的信号和事件,为用户实现API函数调用提供接口。
与现有技术相比,本发明实施例提出的跨平台图形库的***架构分成平***立层和平台相关层两大部分。平***立层中的代码主要是为用户提供的开发接口:这些接口是完整、独立的,开发跨平台应用程序时,开发者应该调用该层中对应的API函数;平台相关层的代码主要用于与特定平台的原生态图形库函数进行交互。该层中的模块一方面连接了平***立层对应的模块,实现了这些模块应该实现的具体功能;另一方面,该层中的模块连接了特定平台原生态的图形库,用作为平***立层提供信息反馈的通道,使得特定平台的图形库控件能够向跨平台图形库控件发送事件响应。因此,本发明实施例的图形库***十分轻量,适合嵌入式设备开发使用;同时扩展方便,很容易添加新的***平台。
附图说明
通过下面结合附图对其示例性实施例进行的描述,本发明上述特征和优点将会变得更加清楚和容易理解。
图1为本发明实施例1一种实现跨平台图形库的***组成示意图;
图2为本发明实施例2另一种一种实现跨平台图形库的***组成示意图;
图3为本发明实施例3跨平台图形库实现一个跨平台按钮控件的主要结构图;
图4为本发明实施例3跨平台图形库实现一个跨平台按钮控件的初始化图;
图5为本发明实施例4跨平台图形库实现一个跨平台按钮控件的平***立层向平台相关层的调用序列图;
图6为本发明实施例5跨平台图形库实现一个跨平台按钮控件的事件回调序列图。
具体实施方式
下面结合附图对本发明作进一步详细说明。
如图1所示,为本发明实施例1一种实现跨平台图形库的***组成示意图。一种实现跨平台图形库的,所述***包括:
平***立层,用来为用户提供开发接口API函数;
平台相关层,用来与所述平***立层的所述API函数进行对接,并与特定平台的原生态图形库函数进行交互。
进一步优选地,所述平台相关层具体包括:
API函数实现模块,用来与所述平***立层的相应API函数进行对接,实现API函数的调用功能;
平台通信模块,用来与所述特定平台的原生态图形库函数进行交互,接收由原生态图形库控件反馈回来的信号和事件,为用户实现API函数调用提供接口。
本发明实施例以实现Button控件为例,平***立层中的Button是提供给用户使用的跨平台按钮控件。该层中的Widget和Control也是跨平台的控件,这里列出只是为了说明Button和他们在图形库中的逻辑关系。通过Buttonlmpl接口,可在平台相关层针对不同平台进行特定平台的按钮控件的实现(如上图的WindowsButtonlmpl和GtkButtonlmpl);在接收事件响应上,Button实现ButtonEventObserver接口,用于接收由原生态图形库控件反馈回来的信号和事件,为用户实现事件回调提供接口。
当用户初始化Button控件时,跨平台图形库请求特定的组件完成Button控件的创建。该组件会根据所处的特定平台,创建该平台上的Buttonlmpl对象实例。
若用户调用Button相关的函数(不妨设Windows平台上的用户调用Button控件的SetText方法),那么这个调用最终会被平台特定的GUI所执行。具体过程是:Button调用Buttonlmpl中的SetText方法,由于C++继承和多态的特性,这个调用会被平台相关层的特定对象调用,这里是WindowsButtonlmpl::SetText。WindowsButtonlmpl会进一步将请求转发给自身所含的原生态图形库控件(WinForm::Button),调用该控件的SetText方法。经过上述步骤,可实现平***立层向平台相关层的调用。下图是这种调用的序列图表示。
在信号的处理问题上,主要通过CallbackHelper和辅助结构完成把信号从平台相关层向平***立层的回送。在初始化控件时,特定平台的CallbackHelper会与原生态控件进行关联,从而实现对原生态控件发出的信号进行捕捉。当***原生态控件发出信号时(WinForm::Button发出ButtonPressed信号),特定平台的CallbackHelper对象将捕捉到该信号,并调用自身的OnButtonPressed函数。OnButtonPressed将调用CallbackHelper指向的WindowsButtonlmpl对象的HandleCommand方法。在HandleCommand中,WindowsButtonlmpl将调用ButtonEventSubject的NotifyButtonPressed方法,该方法最终调用了ButtonEventObserver的ButtonPressed。由于Button实现了ButtonEventObserver,因此Button将接收到来自WinForm的信号消息,从而实现了消息从特定平台向独立平台的发送。通过这种方式,用户便能够在平***立层设计控件的事件响应,而不需要针对不同平台进行特定的实现。下图是事件回调的序列图表示。
本发明实施例的实现跨平台图形库的***分成平***立层和平台相关层两大部分。平***立层中的代码主要是为用户提供的开发接口:这些接口是完整、独立的,开发跨平台应用程序时,开发者应该调用该层中对应的API函数;平台相关层的代码主要用于与特定平台的原生态图形库函数进行交互。该层中的模块一方面连接了平***立层对应的模块,实现了这些模块应该实现的具体功能;另一方面,该层中的模块连接了特定平台原生态的图形库,用作为平***立层提供信息反馈的通道,使得特定平台的图形库控件能够向跨平台图形库控件发送事件响应。因此,本发明实施例的图形库***十分轻量,适合嵌入式设备开发使用;同时扩展方便,很容易添加新的***平台。所述设计方式结构化好,同时在平台扩充问题上,该实施方式具有很好的可扩展性。只需要添加平台相关层的模块,便能在新的***平台上实现特定的图形库控件。由于新添加的模块属于整体框架中的一部分,因此可以减少开发者的开发负担。
如图4所示,本发明实施例4为本发明一种实现跨平台图形库的方法,所述方法包括以下步骤:
当用户进行图形开发的API函数调用时,平***立层提供一相应API函数调用接口;
平台相关层根据所述API函数与平***立层进行对接,并与特定平台的原生态图形库函数进行交互。
进一步优选地,所述平台相关层根据所述API函数与平***立层进行对接,并与特定平台的原生态图形库函数进行交互具体包括:
平台相关层与所述平***立层的相应API函数进行对接,实现API函数的调用功能;
平台相关层与所述特定平台的原生态图形库函数进行交互,接收由原生态图形库控件反馈回来的信号和事件,为用户实现API函数调用提供接口。
本发明实施例以实现Button控件为例,平***立层中的Button是提供给用户使用的跨平台按钮控件。该层中的Widget和Control也是跨平台的控件,这里列出只是为了说明Button和他们在图形库中的逻辑关系。通过Buttonlmpl接口,可在平台相关层针对不同平台进行特定平台的按钮控件的实现(如上图的WindowsButtonlmpl和GtkButtonlmpl);在接收事件响应上,Button实现ButtonEventObserver接口,用于接收由原生态图形库控件反馈回来的信号和事件,为用户实现事件回调提供接口。
当用户初始化Button控件时,跨平台图形库请求特定的组件完成Button控件的创建。该组件会根据所处的特定平台,创建该平台上的Buttonlmpl对象实例。
若用户调用Button相关的函数(不妨设Windows平台上的用户调用Button控件的SetText方法),那么这个调用最终会被平台特定的GUI所执行。具体过程是:Button调用Buttonlmpl中的SetText方法,由于C++继承和多态的特性,这个调用会被平台相关层的特定对象调用,这里是WindowsButtonlmpl::SetText。WindowsButtonlmpl会进一步将请求转发给自身所含的原生态图形库控件(WinForm::Button),调用该控件的SetText方法。经过上述步骤,可实现平***立层向平台相关层的调用。下图是这种调用的序列图表示。
在信号的处理问题上,主要通过CallbackHelper和辅助结构完成把信号从平台相关层向平***立层的回送。在初始化控件时,特定平台的CallbackHelper会与原生态控件进行关联,从而实现对原生态控件发出的信号进行捕捉。当***原生态控件发出信号时(WinForm::Button发出ButtonPressed信号),特定平台的CallbackHelper对象将捕捉到该信号,并调用自身的OnButtonPressed函数。OnButtonPressed将调用CallbackHelper指向的WindowsButtonlmpl对象的HandleCommand方法。在HandleCommand中,WindowsButtonlmpl将调用ButtonEventSubject的NotifyButtonPressed方法,该方法最终调用了ButtonEventObserver的ButtonPressed。由于Button实现了ButtonEventObserver,因此Button将接收到来自WinForm的信号消息,从而实现了消息从特定平台向独立平台的发送。通过这种方式,用户便能够在平***立层设计控件的事件响应,而不需要针对不同平台进行特定的实现。下图是事件回调的序列图表示。
本发明实施例的实现跨平台图形库的方法,将图形API函数的调用实现由平***立层和平台相关层分别完成。平***立层中的代码主要是为用户提供的开发接口:这些接口是完整、独立的,开发跨平台应用程序时,开发者应该调用该层中对应的API函数;平台相关层的代码主要用于与特定平台的原生态图形库函数进行交互。该层中的模块一方面连接了平***立层对应的模块,实现了这些模块应该实现的具体功能;另一方面,该层中的模块连接了特定平台原生态的图形库,用作为平***立层提供信息反馈的通道,使得特定平台的图形库控件能够向跨平台图形库控件发送事件响应。因此,本发明实施例的图形库***十分轻量,适合嵌入式设备开发使用;同时扩展方便,很容易添加新的***平台。所述设计方式结构化好,同时在平台扩充问题上,该实施方式具有很好的可扩展性。只需要添加平台相关层的模块,便能在新的***平台上实现特定的图形库控件。由于新添加的模块属于整体框架中的一部分,因此可以减少开发者的开发负担。
需要注意的是,以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施方式仅限于此,在本发明的上述指导下,本领域技术人员可以在上述实施例的基础上进行各种改进和变形,而这些改进或者变形落在本发明的保护范围内。
Claims (2)
1.一种实现跨平台图形库的***,其特征在于,所述***包括:
平***立层,用来为用户提供开发接口API函数;
平台相关层,用来与所述平***立层的所述API函数进行对接,并与特定平台的原生态图形库函数进行交互,
所述平台相关层具体包括:
API函数实现模块,用来与所述平***立层的相应API函数进行对接,实现API函数的调用功能;
平台通信模块,用来与所述特定平台的原生态图形库函数进行交互,接收由原生态图形库控件反馈回来的信号和事件,为用户实现API函数调用提供接口。
2.一种实现跨平台图形库的方法,其特征在于,所述方法包括:
当用户进行图形开发的API函数调用时,平***立层提供一相应API函数调用接口;
平台相关层根据所述API函数与平***立层进行对接,并与特定平台的原生态图形库函数进行交互,
所述平台相关层根据所述API函数与平***立层进行对接,并与特定平台的原生态图形库函数进行交互具体包括:
平台相关层与所述平***立层的相应API函数进行对接,实现API函数的调用功能;
平台相关层与所述特定平台的原生态图形库函数进行交互,接收由原生态图形库控件反馈回来的信号和事件,为用户实现API函数调用提供接口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110133570.4A CN102799581B (zh) | 2011-05-23 | 2011-05-23 | 一种实现跨平台图形库的***及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110133570.4A CN102799581B (zh) | 2011-05-23 | 2011-05-23 | 一种实现跨平台图形库的***及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102799581A CN102799581A (zh) | 2012-11-28 |
CN102799581B true CN102799581B (zh) | 2016-02-17 |
Family
ID=47198693
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110133570.4A Active CN102799581B (zh) | 2011-05-23 | 2011-05-23 | 一种实现跨平台图形库的***及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102799581B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104317895A (zh) * | 2014-10-23 | 2015-01-28 | 百度在线网络技术(北京)有限公司 | 浏览器展现信息的方法及浏览器 |
CN106959848A (zh) * | 2017-02-21 | 2017-07-18 | 成都景中教育软件有限公司 | 一种基于动态几何的开放接口实现方法 |
CN107402749B (zh) * | 2017-04-14 | 2020-07-07 | 阿里巴巴集团控股有限公司 | 实现图片加载库的方法及装置 |
CN111752550B (zh) * | 2020-06-28 | 2022-07-12 | 吉林大学 | 嵌入式实时Linux与AUTOSAR OS的跨平台开发实现*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101078989A (zh) * | 2007-07-31 | 2007-11-28 | 阮俊杰 | Visio文档跨平台网络浏览器的实现方法及软件 |
CN101115078A (zh) * | 2007-07-19 | 2008-01-30 | 中兴通讯股份有限公司 | 一种用于开发移动通信终端设备的*** |
-
2011
- 2011-05-23 CN CN201110133570.4A patent/CN102799581B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101115078A (zh) * | 2007-07-19 | 2008-01-30 | 中兴通讯股份有限公司 | 一种用于开发移动通信终端设备的*** |
CN101078989A (zh) * | 2007-07-31 | 2007-11-28 | 阮俊杰 | Visio文档跨平台网络浏览器的实现方法及软件 |
Also Published As
Publication number | Publication date |
---|---|
CN102799581A (zh) | 2012-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10026041B2 (en) | Interoperable machine learning platform | |
CN102662664B (zh) | 界面动画实现方法及*** | |
CN102799581B (zh) | 一种实现跨平台图形库的***及方法 | |
US9940224B2 (en) | Automatic remote execution of an application | |
CN103530160A (zh) | 一种页面加载的方法和装置 | |
CN102810184A (zh) | 一种动态执行工作流的方法、装置及企业*** | |
CN104090765A (zh) | 一种***转网页游戏的方法及装置 | |
CN103176802A (zh) | 通过控件池实现***的用户界面ui与控件库分离的方法 | |
CN105867944A (zh) | Web前端数据操作层及其实现方法 | |
CN104267957A (zh) | 一种移动应用统一服务框架*** | |
CN104199714A (zh) | 在安卓***和苹果***上实现移动终端gis平台的方法 | |
CN103092583A (zh) | 一种动态生成设置项列表视图的方法及装置 | |
CN101789944B (zh) | 多功能电能表通信协议栈的开发*** | |
CN106502770A (zh) | 一种基于有限状态机的hmi状态迁移方法 | |
CN102200909A (zh) | 一种移动终端统一界面方法及*** | |
CN102999371B (zh) | 基于Lua脚本的人机界面开发方法及*** | |
CN104834715A (zh) | 一种基于部件和容器的网站生成方法及*** | |
WO2019080665A1 (zh) | 视图显示方法、装置、设备及存储介质 | |
CN103902325A (zh) | 实现窗口同步的方法和装置 | |
CN104216839A (zh) | 一种信息交互的方法、装置及终端 | |
CN107025040A (zh) | 基于oled屏幕的显示设置方法、***及图形用户界面 | |
CN105786484A (zh) | 一种应用融合方法及装置 | |
CN114356430B (zh) | 一种基于airflow调度***的DAG依赖配置工具 | |
CN103150162B (zh) | 提高嵌入式软件代码共享程度的方法 | |
CN106201493A (zh) | 基于vxWorks的ucGui*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |