基于QtDesigner插件机制的二次开发及应用

2019-06-01 10:06于凯华李华龙
电脑知识与技术 2019年12期

于凯华 李华龙

摘要:本文简述了利用QtDesigner插件机制二次开发简易组态工具,显示自定义控件及配置控件属性,完成控件显示及属性配置界面。

关键词:Qt;Designer;插件开发

中图分类号:TP271 文献标识码:A

文章編号:1009-3044(2019)12-0293-02

为了快速开发一款简易组态工具,完成嵌入式仪器设备操作界面组态控制功能,采用基于Qt开发的一款交互式可视化GUI设计开源软件工具Designer,并根据项目需求,对其控件功能进行二次开发。

采用Qt Designer作为二次开发的工具,主要是因为Qt是一个跨平台的开源C++图形用户界面应用程序开发框架,支持的操作系统包括: Microsoft Windows7,Linux,FreeBSD,BSD/OS等等。而且Qt 具有良好的封装机制,其模块化程度非常高,可重用性较好,还提供了丰富的API,对软件开发来说非常方便。采用的Qt Designer版本是基于Qt4.7.4库版本开发的。

1前言

Qt Designer基于插件的架构允许用户自定义和第三方的自定义窗口控件进行编辑,包括控件属性,控件动作等。但是Qt Designer本身是面向软件开发人员进行功能界面设计及代码开发的,并不适用于无软件开发基础的工程组态人员,因此进行二次开发,对其控件显示及属性配置进行了重新开发及封装,实现简易的组态软件。工程人员利用该组态软件进行控制逻辑设计及组态,并保存成二进制文件,用于嵌入式仪器设备加载显示组态界面并进行逻辑操作。

插件二次开发是该组态软件的重要部分,主要包括以下几个方面。

2插件接口类实现

Qt Designer提供了插件接口类QDesignerCustomWidgetInterface及加载插件类的方法,为复用其插件加载机制,自定义设计的插件必须继承于该接口类,保证软件启动后可以顺利加载自定义开发的插件。接口类中的成员函数描述了部件暴露的各种属性,其大多数是由基类中的纯虚函数提供的。子类需重新实现的函数如下表所示:

3插件控件类实现

Qt Designer软件中插件的控件类默认继承于QWidget,其包含了众多属性项配置,而绝大多数并不适用于工程组态人员进行配置,工程人员更倾向于使用属性项配置简单的组态控件,能满足工程显示要求即可。因此对Qt Designer控件进行二次开发,设计继承于QWidget的控件基类HmiWidget,并设计自定义属性数据结构HmiProperty,用于存储自定义控件的属性项及属性值。

HmiWidget控件基类主要实现以下功能:

基类HmiWidget中封装自定义控件的基本属性,包括控件坐标、长度、宽度、可见性、可用性、偏移位置等信息。继承于该基类的子控件则实现自定义的属性,以自定义按钮控件为例,添加自定义属性,包括按钮文本、文本颜色、字体大小、安全级别等等。该设计方案易于扩展控件功能,提高代码的复用性,避免代码的重复开发工作;根据不同项目需求,快速完成控件开发。

自定义属性数据结构HmiProerty用于存储自定义控件的属性类型及属性值,Qt Designer插件加载时获取控件属性会强制转换为QVariant数据结构,QVariant是Qt提供的通用数据类型,支持C++所有的标准数据类型,同样支持自定义数据类型,为保证自定义数据类型HmiProperty可以被Qt Designer识别,可以通过Qt提供的宏Q_DECLARE_METATYPE()将HmiProperty注册到QVariant中,保证属性加载过程中可以识别自定义书记类型。

4自定义属性加载

Qt Designer加载显示控件属性是通过QObject提供的属性获取接口函数,获取控件的所有属性,不仅包括控件本身的属性项,同样包括基类QWidget的属性项。而实际组态过程中只需显示工程人员需要配置的属性项即可,因此对Qt Designer属性加载过程中的属性处理机制进行裁剪处理。主要包括两个部分:

? 对自定义控件进行类型判定,Qt的元对象系统提供了实时类型信息获取机制,这保证通过Qt提供的函数获取创建的控件对象的实际对象类型。判断控件类型是否是继承于HmiWidget,若是,则证明该控件属于组态工具要加载的对象,否则直接返回不予处理,避免加载Qt原生的控件对象。

? 自定义控件属性项加载,同样借助于Qt元对象系统,获取自定义控件的属性项,进行类型判断,查看属性项对象是否继承于HmiProperty,若是,则添加到显示属性类表中,否则直接返回,不予处理。最终将控件显示属性列表中的属性项加载到属性配置窗口中进行显示。

5结束语

自定义插件创建完成后,运行Qt Designer软件,显示控件窗口及属性配置窗口如下图所示。

基于Qt Designer插件机制二次开发的简易组态软件,满足工程组态人员组态要求,将工程组态人员组态的画面最终保存成二进制文件,下装到嵌入式仪器控制系统中,界面显示正常,操作动作正确执行,满足工程要求。

【通联编辑:梁书】