Qt动态生成图形界面程序的设计与实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2) 描述应用程序。包括描述应用程序调用的类和类函 数,以及必要的输入、输出参数等。
(3) 描述事件的绑定。包括描述器件与器件间、器件与 应用程序间的事件绑定。
下面通过一个实例,展示 XML 描述文件是怎样描述一个 窗口及其功能的。
<窗口> <窗口名 窗口类型 =“Dialog”>testDlg</窗口名〉
ARTIFICIAL INTELLIGENCE AND IDENTIFICATION TECHNIQUES
人工智能及识别技术
动态生成图形界面程序的设计与实现
易彤
(武汉大学计算机学院,武汉 430000)
摘 要: 介绍通过运行解释程序解析 XML 描述文件,动态生成 Qt 语言图形界面应用程序的实现方法。实际应用证 明,使用这种技术可以缩短软件开发周期,提高软件的可扩展性、可维护性和稳定性。 关键词: 动态生成图形界面;描述文件;事件动态绑定;XML 技术;Qt 语言
件中动态库信息调用动态库加载程序得到应用功能对象。Lin- ux 系统下的动态库加载程序比较简单,相关程序的开发资料 也比较容易查到,这里就不作详细介绍。要说明的是,在应 用程序开发中所有的应用类,都需要继承一个统一的基类,
这是为了在动态加载应用类时,动态生成图形界面的程序能
够以统一的形式加载。同时为实现参数的传递,基类中要有 统一输入参数属性和输出参数属性定义。
[9] 张鹏,吴刚. 基于 XML 的图形用户界面 [N] . 计算机世界 报,2006,08.28 (B15、B16) .
作者简介 易彤,男 (1971-),高级Baidu Nhomakorabea程师,石油大学,现正在攻读武 汉大学计算机学院硕士研究生,研究方向:计算机技术 。
-104-
class windowSlot:public Qobject { Q_OBJECT: public: windowSlot () ; ~windowSlot () ; DialogMap M_dialog //应用中需要使用的窗口 StringMap m_inputMap; //输入的参数 ApplyClass *m_apply; //应用类指针 public slots:
1 概念
同编程开发图形界面程序相比,使用动态生成技术,程 序开发员不需要编写图形界面程序、编译源代码、部署、运 行程序执行码。而是编写图形界面描述文件,通过执行图形 界面解释程序解析描述文件,就能生成可执行的图形界面应 用程序。使用动态生成系统,能够简化图形界面程序的开发 步骤,提高系统的开发效率,减少系统程序的错误。
void showWindow () ; //显示窗口 void SoltFunction () ; //得到指定窗口中 m_widgetParaMap 指定的器件中的值 } 该类中 showWindow 槽函数用于当一个器件发出信号后显 示输入参数中指定的窗口。slotFunction 槽函数用于调用分析 输入参数和调用 ApplyClass 中的应用函数。在动态事件绑定 实现过程中,每一个信号都会有一个槽对象和它对应,每一 个槽对象对应了一个应用功能。这种对应关系实现了图形界 面中器件发出的事件和应用功能的绑定。
动态生成图形界面技术具有以下特点: (1) 动态生成图形界面不需要编写程序,避免各种人为 错误的产生,提高了软件的稳定性。 (2) 实现了软件的组件化开发,提高了软件的可扩展性 和可维护性。 (3) 减轻程序开发员学习图形界面开发语言的负担,缩 短了软件开发周期。
2 设计
实现方案的图形界面开发的语言采用 Qt 语言,描述文件 为 XML 格式文件,应用功能的编程语言使用标准 C++语言。 系统开发环境是 Linux 操作系统。设计方案由数据层、数据访 问层、业务层三层结构组成。其中数据层定义 XML 描述文件 中节点的结构,节点名和属性名的命名标准。数据访问层的 作用是访问 XML 文件,解析文件中对图形界面和应用功能的 描述。业务层的功能是根据图形界面解析结果动态生成图形 界面的各种窗口和器件,实现器件上产生的事件与应用功能 的绑定。同时该层还具有管理内存中的各种业务对象的功能。
3.3.3 动态事件绑定实现 Qt 提供的信号、槽机制是由 QObject 类中一个 connect 成
员函数实现的。该函数为:bool QObject::connect (const QOb- ject *sender,const char *signal,const QObject *receiver ,const char * member)。分析该函数,可以发现信号类 sender 和槽类 re- ceiver 可以是不同的类。这就为事件的动态绑定提供了一个有 利的条件。也就是说,信号可以使用 Qt 提供的各种器件类和 信号函数,可以开发一个槽类用于加载各种应用。下面就是 槽类的定义。
[7] KASIK D J.LUND M A,RAMSEY H W. Reflections on using a UIMS for complex applications [ J ] . IEEE Software 1989.6 (1):54-61.
[8] 王婷. XML 技术在嵌入式系统的 GUI 系统 [J] . 武汉科技 大学学报,2005,28 (3):75-77.
参考文献
[1] Michael Morrison. XML 揭秘- 入门.应用.精通 [M] . 清华 大学出版社,2001:173-192.
[2] Daniel Solin. 24 小时学通 Qt 编程 [M] . 人民邮电出版社, 2000:41-51.
[3] 王子强. Linux 下图形用户界面程序的开发与实现 [J] . 计 算机应用与软件,2005,6:81-83.
[4] Eric Harlow 开发 Linux 应用--用 GTK+和 GDK 开发 Linux 图形用户界面应用 [M] . 电子工业出版社,2000:50-54.
[5] 施奈德曼. 用户界面设计—— —有效的人机交互测略 [M] . 电子工业出版社,2004:114-117.
[6] 吴根祥. 基于 XML 的用户界面描述语言分析 [J] . 计算机 系统应用,2004,12:28-30.
Dynamically-generated Graphical Interface Program Design and Implementation
YI Tong
(College of Computer Science, Wuhan University, Wuhan 430000)
Abstract: This paper by running the interpreter, parsing XML description file, dynamically generated language Qt GUI ap- plications are implemented. Practical application shows that the use of such technology can shorten the software development cycle and improve the software, scalability, maintainability and stability. Key words: dynamically generated graphical interface; description files; event dynamic binding; XML technologies; Qt lan- guage
3 实现
3.1 数据层实现 数据层描述文件是动态生成图形界面技术的一个重要组
成部分,其目的是用一种广泛使用、各种具有描述性结构的 语言来替代图形界面编程语言实现程序开发。XML 元语言是
本文收稿日期:2009-9-12
实现描述文件的最好选择。使用 XML 结构的图形界面描述文 件,应具有以下功能:
(1) 描述窗口和各种器件。包括描述图形界面窗口和器 件的布局、几何属性、显示属性等。
-103-
电脑编程技巧与维护
case tyWindowNode: //窗口节点描述信息分析。得到创建窗口和器件的各 //种信息。
xmlWindowParser (m_Node->getFirstChild ()) ; break; case tyApplyNode: //应用节点描述信息分析。得到调用应用功能的各 //种信息。 xmlApplyParser (m_Node->getFirstChild ()) ; break; } 3.3 业务层的实现 业务层的功能是利用数据访问层传递来的各种描述参数, 实现 Qt 图形界面的创建,并将各种应用功能通过动态事件绑 定与图形界面耦合。同时,业务层还要管理在这一过程中产 生的各种业务对象,如各种应用对象、窗口对象等。下面将 详细介绍窗口和器件创建、应用功能加载、动态事件绑定等 功能的实现方法。 3.3.1 窗口和器件动态创建实现 窗口和器件动态创建的要点在两个方面,一方面是要将 窗口和器件的描述信息转化为 Qt 的具体窗口和器件,另一个 方面是要能够对创建的器件进行有效的管理。 为了实现这两个方面的技术,首先定义一个 QDialogOb- ject 窗口类,该类的具体定义如下: class QDialogObject : public QDialog { public : QDialogObject (QWidget *,const char *,WFalg); ~QDialogObject (); WidgetManager m_widgetManager; } QDialogObject 类继承了 Qt 中的 QDialog 类,增加了一个 Qt 器件管理属性。这个属性记录了每一个器件的指针、器件 名、器件的父器件。通过这个属性可以查到每一个器件,并 可以操作这些器件。 在具体实现时,先根据窗口描述信息中的几何形状属,
<加入器件> <父器件>testDlg</父器件> <器件名 器件类型=“QPushButton ”>Ok</器件名>
</加入器件> </窗口> <事件>
<发送者 事件类型=“clicked ”>Ok</发送者> <接收者 接收函数=“slotFunction”>testSlot</接收者> <应用函数 应用函数类名 =“aptest” 输出值=“Hello world”>printValue</应用函数> </事件> 3.2 数据访问层实现 数据访问层的主要功能是,提供访问和操作 XML 文件的 方法,解析描述文件中窗口和器件、应用功能、事件绑定的 定义。在流程中,需要实现窗口和器件描述解析、应用功能 描述解析、事件绑定描述解析功能。 通过这个简单的程序,可以看到描述信息解析的一个基 本模式。依据这个模式,可以将 XML 文件中的各种描述信息 在分类后,传递给相应业务层中的功能模块。 switch (nodeType) {
显示属性实例化一个 QDialogObject 类。然后根据已得到的器 件类型、父器件、器件属性的描述参数,实例化 Qt 的各种器 件类,最后将器件对象插入 WidgetManager 属性。程序通过操 作 WidgetManager 属性实现器件事件绑定、数据访问等应用。
3.3.2 应用功能加载实现 应用功能采用用动态库调用方式实现动态加载。具体实 现步骤是:将开发的应用功能程序编译形成动态库,在 XML 描述文件中定义动态库的路径和库名,解释程序依据描述文
(3) 描述事件的绑定。包括描述器件与器件间、器件与 应用程序间的事件绑定。
下面通过一个实例,展示 XML 描述文件是怎样描述一个 窗口及其功能的。
<窗口> <窗口名 窗口类型 =“Dialog”>testDlg</窗口名〉
ARTIFICIAL INTELLIGENCE AND IDENTIFICATION TECHNIQUES
人工智能及识别技术
动态生成图形界面程序的设计与实现
易彤
(武汉大学计算机学院,武汉 430000)
摘 要: 介绍通过运行解释程序解析 XML 描述文件,动态生成 Qt 语言图形界面应用程序的实现方法。实际应用证 明,使用这种技术可以缩短软件开发周期,提高软件的可扩展性、可维护性和稳定性。 关键词: 动态生成图形界面;描述文件;事件动态绑定;XML 技术;Qt 语言
件中动态库信息调用动态库加载程序得到应用功能对象。Lin- ux 系统下的动态库加载程序比较简单,相关程序的开发资料 也比较容易查到,这里就不作详细介绍。要说明的是,在应 用程序开发中所有的应用类,都需要继承一个统一的基类,
这是为了在动态加载应用类时,动态生成图形界面的程序能
够以统一的形式加载。同时为实现参数的传递,基类中要有 统一输入参数属性和输出参数属性定义。
[9] 张鹏,吴刚. 基于 XML 的图形用户界面 [N] . 计算机世界 报,2006,08.28 (B15、B16) .
作者简介 易彤,男 (1971-),高级Baidu Nhomakorabea程师,石油大学,现正在攻读武 汉大学计算机学院硕士研究生,研究方向:计算机技术 。
-104-
class windowSlot:public Qobject { Q_OBJECT: public: windowSlot () ; ~windowSlot () ; DialogMap M_dialog //应用中需要使用的窗口 StringMap m_inputMap; //输入的参数 ApplyClass *m_apply; //应用类指针 public slots:
1 概念
同编程开发图形界面程序相比,使用动态生成技术,程 序开发员不需要编写图形界面程序、编译源代码、部署、运 行程序执行码。而是编写图形界面描述文件,通过执行图形 界面解释程序解析描述文件,就能生成可执行的图形界面应 用程序。使用动态生成系统,能够简化图形界面程序的开发 步骤,提高系统的开发效率,减少系统程序的错误。
void showWindow () ; //显示窗口 void SoltFunction () ; //得到指定窗口中 m_widgetParaMap 指定的器件中的值 } 该类中 showWindow 槽函数用于当一个器件发出信号后显 示输入参数中指定的窗口。slotFunction 槽函数用于调用分析 输入参数和调用 ApplyClass 中的应用函数。在动态事件绑定 实现过程中,每一个信号都会有一个槽对象和它对应,每一 个槽对象对应了一个应用功能。这种对应关系实现了图形界 面中器件发出的事件和应用功能的绑定。
动态生成图形界面技术具有以下特点: (1) 动态生成图形界面不需要编写程序,避免各种人为 错误的产生,提高了软件的稳定性。 (2) 实现了软件的组件化开发,提高了软件的可扩展性 和可维护性。 (3) 减轻程序开发员学习图形界面开发语言的负担,缩 短了软件开发周期。
2 设计
实现方案的图形界面开发的语言采用 Qt 语言,描述文件 为 XML 格式文件,应用功能的编程语言使用标准 C++语言。 系统开发环境是 Linux 操作系统。设计方案由数据层、数据访 问层、业务层三层结构组成。其中数据层定义 XML 描述文件 中节点的结构,节点名和属性名的命名标准。数据访问层的 作用是访问 XML 文件,解析文件中对图形界面和应用功能的 描述。业务层的功能是根据图形界面解析结果动态生成图形 界面的各种窗口和器件,实现器件上产生的事件与应用功能 的绑定。同时该层还具有管理内存中的各种业务对象的功能。
3.3.3 动态事件绑定实现 Qt 提供的信号、槽机制是由 QObject 类中一个 connect 成
员函数实现的。该函数为:bool QObject::connect (const QOb- ject *sender,const char *signal,const QObject *receiver ,const char * member)。分析该函数,可以发现信号类 sender 和槽类 re- ceiver 可以是不同的类。这就为事件的动态绑定提供了一个有 利的条件。也就是说,信号可以使用 Qt 提供的各种器件类和 信号函数,可以开发一个槽类用于加载各种应用。下面就是 槽类的定义。
[7] KASIK D J.LUND M A,RAMSEY H W. Reflections on using a UIMS for complex applications [ J ] . IEEE Software 1989.6 (1):54-61.
[8] 王婷. XML 技术在嵌入式系统的 GUI 系统 [J] . 武汉科技 大学学报,2005,28 (3):75-77.
参考文献
[1] Michael Morrison. XML 揭秘- 入门.应用.精通 [M] . 清华 大学出版社,2001:173-192.
[2] Daniel Solin. 24 小时学通 Qt 编程 [M] . 人民邮电出版社, 2000:41-51.
[3] 王子强. Linux 下图形用户界面程序的开发与实现 [J] . 计 算机应用与软件,2005,6:81-83.
[4] Eric Harlow 开发 Linux 应用--用 GTK+和 GDK 开发 Linux 图形用户界面应用 [M] . 电子工业出版社,2000:50-54.
[5] 施奈德曼. 用户界面设计—— —有效的人机交互测略 [M] . 电子工业出版社,2004:114-117.
[6] 吴根祥. 基于 XML 的用户界面描述语言分析 [J] . 计算机 系统应用,2004,12:28-30.
Dynamically-generated Graphical Interface Program Design and Implementation
YI Tong
(College of Computer Science, Wuhan University, Wuhan 430000)
Abstract: This paper by running the interpreter, parsing XML description file, dynamically generated language Qt GUI ap- plications are implemented. Practical application shows that the use of such technology can shorten the software development cycle and improve the software, scalability, maintainability and stability. Key words: dynamically generated graphical interface; description files; event dynamic binding; XML technologies; Qt lan- guage
3 实现
3.1 数据层实现 数据层描述文件是动态生成图形界面技术的一个重要组
成部分,其目的是用一种广泛使用、各种具有描述性结构的 语言来替代图形界面编程语言实现程序开发。XML 元语言是
本文收稿日期:2009-9-12
实现描述文件的最好选择。使用 XML 结构的图形界面描述文 件,应具有以下功能:
(1) 描述窗口和各种器件。包括描述图形界面窗口和器 件的布局、几何属性、显示属性等。
-103-
电脑编程技巧与维护
case tyWindowNode: //窗口节点描述信息分析。得到创建窗口和器件的各 //种信息。
xmlWindowParser (m_Node->getFirstChild ()) ; break; case tyApplyNode: //应用节点描述信息分析。得到调用应用功能的各 //种信息。 xmlApplyParser (m_Node->getFirstChild ()) ; break; } 3.3 业务层的实现 业务层的功能是利用数据访问层传递来的各种描述参数, 实现 Qt 图形界面的创建,并将各种应用功能通过动态事件绑 定与图形界面耦合。同时,业务层还要管理在这一过程中产 生的各种业务对象,如各种应用对象、窗口对象等。下面将 详细介绍窗口和器件创建、应用功能加载、动态事件绑定等 功能的实现方法。 3.3.1 窗口和器件动态创建实现 窗口和器件动态创建的要点在两个方面,一方面是要将 窗口和器件的描述信息转化为 Qt 的具体窗口和器件,另一个 方面是要能够对创建的器件进行有效的管理。 为了实现这两个方面的技术,首先定义一个 QDialogOb- ject 窗口类,该类的具体定义如下: class QDialogObject : public QDialog { public : QDialogObject (QWidget *,const char *,WFalg); ~QDialogObject (); WidgetManager m_widgetManager; } QDialogObject 类继承了 Qt 中的 QDialog 类,增加了一个 Qt 器件管理属性。这个属性记录了每一个器件的指针、器件 名、器件的父器件。通过这个属性可以查到每一个器件,并 可以操作这些器件。 在具体实现时,先根据窗口描述信息中的几何形状属,
<加入器件> <父器件>testDlg</父器件> <器件名 器件类型=“QPushButton ”>Ok</器件名>
</加入器件> </窗口> <事件>
<发送者 事件类型=“clicked ”>Ok</发送者> <接收者 接收函数=“slotFunction”>testSlot</接收者> <应用函数 应用函数类名 =“aptest” 输出值=“Hello world”>printValue</应用函数> </事件> 3.2 数据访问层实现 数据访问层的主要功能是,提供访问和操作 XML 文件的 方法,解析描述文件中窗口和器件、应用功能、事件绑定的 定义。在流程中,需要实现窗口和器件描述解析、应用功能 描述解析、事件绑定描述解析功能。 通过这个简单的程序,可以看到描述信息解析的一个基 本模式。依据这个模式,可以将 XML 文件中的各种描述信息 在分类后,传递给相应业务层中的功能模块。 switch (nodeType) {
显示属性实例化一个 QDialogObject 类。然后根据已得到的器 件类型、父器件、器件属性的描述参数,实例化 Qt 的各种器 件类,最后将器件对象插入 WidgetManager 属性。程序通过操 作 WidgetManager 属性实现器件事件绑定、数据访问等应用。
3.3.2 应用功能加载实现 应用功能采用用动态库调用方式实现动态加载。具体实 现步骤是:将开发的应用功能程序编译形成动态库,在 XML 描述文件中定义动态库的路径和库名,解释程序依据描述文