qt界面模板Word格式.docx
《qt界面模板Word格式.docx》由会员分享,可在线阅读,更多相关《qt界面模板Word格式.docx(12页珍藏版)》请在冰点文库上搜索。
graphdisplayeffectissatefied.
keywords:
1tonprotectinterface;
moduledesign;
0引言
图形界面已经成为电力系统软件的一个重要组成部分。
通过图形界面展示发布信息和数
据,进行交换操作,方便快捷而且直观。
微机保护测控装置的数据、信息显示经历了最早的数码管或者打印机显示,到后来普通字符、点阵液晶的字符或汉字显示,到现在彩色液晶的图形、汉字的综合显示。
近年来,电力系统用户对图形界面显示的要求越来越高。
目前的国内绝大多数主流厂家在高压保护、测控装置或故障录波器等产品中采用了图形界面显示,由于其美观且方便用户操作,功能全面,受到了广大用户的喜爱和推崇。
嵌入式qt(以下简称qt)是一个为嵌入式设备上的图形用户接口和应用开发而定制的
c++工具软件开发包,如果有嵌入式linux操作系统支持,它可以运行在多种不同的处理器体系上,例如:
intelx86,aRm,mips,powerpc等。
它为在嵌入式设备上开发应用程序提供了标准的api函授,而且这些api函数都是单一的,在不同平台下都是用相同api函数,方便在不同体系结构下进行代码移植。
qt专门为小型设备提供图形用户界面的应用框架和窗口系统。
提供了丰富的窗口小部件,并且还支持窗口部件的定制,因此它可以为用户提供漂亮的图形界面
1ton保护装置是国电南瑞为河北承德西地110kV变电站工程中开发的基于iec61850标准的多条线路保护测控一体化装置的简称。
它是国电南瑞和河北承德西地用户为实现基于iec61850标准的集中式线路保护,在降低成本和提高装置可靠性上做的一次有益的探索。
采用双机冗余,高速adsp-bF533和强大的powerpc8270集中管理多条线路的保护和测控功能,同时负责液晶显示和iec61850数据、信息的转发。
11ton保护总体结构及其功能特点
1ton保护装置采用了分层分模块设计思想。
高速adsp-bF533负责最大8条线路96
路交流量和128路开关量的数据采集、计算和保护逻辑判断及出口,即相当于完成变电站中
多个装置保护功能。
powerpc8270以嵌入式linux操作系统为软件应用平台,实现与
adsp-bF533之间保护数据、动作事件、操作命令等交换;
实现定值的存储和管理;
实现
iec61850模型的建立和与主站的数据、信息交换;
实现基于qt的保护界面的显示和管理;
实现数据库信息的管理,即相当于实现了变电站中后台监控层的功能,adsp-bF533与
powerpc8270之间的数据、信息交换通过双口Ram来完成,相当于变电站中装置与监控后
台之间的通讯通道。
采用分层的设计思想简化了软件的设计,提高了保护装置的可靠性。
同时我们在powerpc8270上的软件采取了分模块设计的思想,具体分为数据库管理模
块,定值管理模块,iec61850处理模块和保护界面显示模块。
数据库管理模块负责与
adsp-bF533之间数据、信息的交换,录波数据的存储,iec61850和界面数据源数据的组
织;
定值管理模块负责iec61850模块和保护界面模块中保护定值的管理和保护定值的校验
和下发;
iec61850模块负责与站控层设备之间数据、信息的交换,iec61850模型的创建等;
保护界面负责遥测、遥信数据和动作、操作事件的简报显示,遥控、定值和参数校验功能的
实现。
图1为1ton保护系统接口框图
图11ton保护系统接口框图
Fig1theframeofthe1tonprotectsysteminterface
其中保护界面显示模块采用了qt软件包进行了开发,本文重点讨论基于qt的1ton保
护界面的功能设计。
2基于qt的1ton保护界面的功能设计
2.1基于qt的1ton保护界面总体架构的设计
根据通用保护装置液晶界面功能要求及用户的特殊要求,1ton保护装置应该具备遥测、遥控、遥信、简报窗、保护定值管理功能、参数校验、重要参数设置、用户登录管理及装置接线图显示。
如图2所示
图2保护界面功能设计框图
Fig2thefunctiondesignframeoftheprotectinterface
qt程序设计思路清晰,它是面向对象的,容易扩展。
它以main入口函数处开始编程,并且支持命令行参数设置启动选项,通过创建一个qapplication对象来管理应用程序范围的资源。
在qapplication对象被执行前,可以创建与用户交互的可视化元素,即窗口部件。
例如按钮、菜单、滚动条和框架都是窗口部件的实例。
主窗口部件可以包含其他窗口部件。
有我们可以通过setgeometry可以确定的坐标定义窗口部件的位置,同时窗口部件总是被隐藏创建,可以避免窗口部件闪烁。
因此我们在未调用show(显示函数)可以初始化创建我们需要的所有窗口部件,可以避免在程序运行过程中被多次动态创建造成系统运行效率低下。
如上图2所示,首先创建了派生于qmainwindow主框架,完成保护描述信息(如线路描述、装置ip地址、定值描述,四遥参数描述等)的读取和初始设置,然后创建派生于qwidget主窗口部件和状态栏部件。
主窗口部件接着创建派生于qwidget遥测、遥信、遥控数据部件、装置接线图部件和派生于qmainwindow的简报窗口。
状态栏部件创建派于基于qdialog的用户登录管理、重要参数设置、参数校验对话框和基于qmainwindow的定值管理窗口。
由于qmainwindow类和qdialog类均派生于qwidget类,所以它们的创建过程很类似,以创建基于qmainwindow部件为例:
被创建对象=newqmainwindow(父对象,“被创建对象名称”,创建标志);
//创建对象实例被创建对象->
setgeometry(坐标系);
//设置部件的布局
通过qt创建部件和完成该部件的布局是比较清晰和简单的,用户可以很方便利用qt完成保护界面总体架构的设计。
2.2基于qt的1ton保护界面功能模块设计
以保护定值管理界面例,介绍qt如何进行功能模块的设计。
对于保护管理定值界面,根据其功能需求应具备定值召唤和定值修改、定值区号召唤和修改,定值校核范围的设定以及保护开关量和保护采样值的查看。
如图3
图31ton保护定值管理界面
Fig3thevaluemanageinterfaceof1tonprotect
在定值管理界面中,当我们对菜单项或者工具栏进行操作时,需要根据不同的命令显示不同的界面。
这里我们就要使用qt中另一个特别重要的特性——“信号和槽”,当需要用户的响应命令和相关的处理程序建立联系时,我们只需要调用connect函数即可,调用形式:
connect(动作事件对象,signal(“何种用户动作事件”),部件对象,slot(“动作事件的处理函数”));
当需要用户需要移除的响应命令和相关的处理程序联系时,我们只需要调用disconnect函数即可,调用形式:
disconnect(动作事件对象,signal(“何种用户动作事件”),部件对象,slot(“动作事件的处理函数”))。
这种通信连接关系在程序运行过程中可以随时建立和移除。
如图4为1ton保护定值管理界面事件响应流程。
如图4保护定值管理界面事件响应流程
Fig4theresponseflowof1tonprotectvaluemanageinterface
2.3基于qt的1ton保护界面汉字显示
为了方便用户对1ton保护装置的浏览和操作,我们需要以汉字方式显示。
在通用保护装置的普通液晶需要显示汉字时,常用的方法就是直接读取字库中点阵显示,显然这种方法程序处理起来非常麻烦。
而qt以本地字符编码方式unicode很好地解决了这个问题。
unicode是一种支持世界上绝大多数书写系统的字符编码标准。
它使用16位取代8位来存储字符,它可以编码大约65000个字符,可以覆盖绝大多数的汉字。
qt中的类qtextcodec专门可以实现编码字符的转换。
具体实现函数如下:
qstringgbkstr(constchar*chars)
{
qtextcodec*gbk;
gbk=qtextcodec:
:
codecForname("
gbk"
);
returngbk->
tounicode(chars,strlen(chars));
}
每次将需要显示的汉字传递给constchar*chars后,得到的编码字符就可以在各个部件中显示汉字。
3结论
基于qt的图形界面设计原理简单,功能强大,思路清晰。
由于qt的跨平台性和易移植性,相信在今后嵌入式平台图形界面显示中得到越来越广泛的应用。
目前,在河北承德西地110kV变工程1ton保护装置中,基于qt设计的保护定值界面在powerpc8270平台上嵌入式linux下运行性能稳定,画面显示优美,用户可操作性强。
得到了用户的认可和赞誉。
4参考文献:
[1]肖世广,李彦,吉华linux环境下基于qt库的软件plc开发系统,计算机工程与设计。
20xx,4(7):
1663-1666.developmentofsoftwareplcdevelopmentsystembasedonqtcomponentsinlinuxenvironment.xiaoshi-guang,liyan,puterengineeringanddesign.20xx,4(7):
1663-1666.
[2]徐广振,张茂青,董里嵌入式gui应用平台qtopia在intelxscalepxa270上的移植,自动化信息。
embeddedguiapplicationplatformqtopiatransplantstointelxscalepxa270.xuguang-zhen,zhangmao-qing,dongliautomationinFoRmation.
[3]钱龙华,吕强,杨季华,钱培德基于嵌入式linux系统的智能电话信息终端的设计与实现,微电子学与计算机。
20xx,24
(2):
167-170.designandimplementationofanintelligenttelephoneinformationterminalbasedonembeddedlinux.qianlong-hua,lVqiang,yangji-wen,qianpei-de.20xx,24
(2):
167-170.
[4]钱朝阳,徐英虎,徐方亮基于linux操作系统防火墙图形化用户界面的设计与实现,安徽建筑工业学院学报(自然科学版)。
20xx,2
(1):
62-64.designandconstructaFirewallwithgraphicalinterfaceforusersinlinuxos.qianchao-yang,xuying-hu,xiFang-lang.journalofanhuiinstitute
ofarchitecture//开始
voidon_up_clicked();
//加速
voidon_down_clicked();
//减速
voidon_stop_clicked();
//停止
voidon_close_clicked();
//关闭
signals:
voidsendValue(int);
//传值
private:
ui:
widget*ui;
inti;
//变量
qtimer*timerstart;
//开始定时器
qtimer*timerup;
//加速定时器
qtimer*timerdown;
//减速定时器
dialog*dialog;
//子对话框
(6)主界面类构造函数中进行成员变量的初始化。
示例代码如下:
this->
setFixedsize(width(),height());
ui->
progressbar->
setValue(0);
//初始值为0
setRange(0,maxsize-1);
//设置进度条值的范围//红底
setstylesheet("
qprogressbar:
chunk
{background-color:
rgb(255,0,0)}"
timerstart=newqtimer(this);
timerup=newqtimer(this);
timerdown=newqtimer(this);
connect(timerstart,signal(timeout()),this,slot(on_start_clicked()));
connect(timerup,signal(timeout()),this,slot(on_up_clicked()));
connect(timerdown,signal(timeout()),this,slot(on_down_clicked()));
i=0;
dialog=newdialog;
connect(this,signal(sendValue(int)),dialog,slot(getValue(int)));
dialog->
show();
start->
setenabled(true);
up->
setenabled(false);
down->
stop->
(7)分别为五个pushbutton添加信号对应的槽(类似消息响应函数),代码如下:
//开始
voidwidget:
on_start_clicked()
timerstart->
start
(1);
timerup->
stop();
timerdown->
if(i>
=maxsize-1)
setValue(maxsize-1);
emitsendValue(maxsize-1);
qmessagebox:
information(this,tr("
提示"
),tr("
结束!
"
),qmessagebox:
ok|qmessagebox:
default);
return;
//赋值
setValue(i);
i+=i;
emitsendValue(i);
label_2->
settext("
4"
//加速
on_up_clicked()
i+=up;
7"
//减速
on_down_clicked()
篇三:
浅谈qt
浅析qt界面库
20xx-06-2113:
52佚名互联网字号:
t|t
qt有商业版本和开源版本,被nokia收购后,开源版本使用的协议是lgpl,就是说,你把qt当作是一个库,你不修改库只是调用库的话,是免费的,而且你的代码不需要开源,只有针对qt库的改动部分才需要开源。
ad:
20xx云计算架构师峰会课程资料下载
qt界面库是本文主要讲述的内容,下面一段话来自坛子里。
对于qt,其实也是一个不错的选择。
linux,c++写界面基本上都是用它。
这个东西是跨平台的。
手机上也有。
问题就是这个东西到底免费还是不免费谁的不知道(linux上是免费的,我的是windows)。
他又插件直接集成进Vs20xx,20xx,然后想mFc那样花界面。
如果熟悉,开发效率跟mFc是一样的。
网上我以前找过,还是有不少的,毕竟这个东西也很久之前就开发出来了。
问题是这个很难招到这样的人才。
得靠自己去培养。
对于qt的描述,我不认同仁兄的看法。
首先,qt有商业版本和开源版本。
被nokia收购后,开源版本使用的协议是lgpl,就是说,你把qt当作是一个库,你不修改库只是调
用库的话,是免费的,而且你的代码不需要开源,只有针对qt库的改动部分才需要开源,所以,lgpl这个协议是很适合开源库的商业用途的。
其次,使用qt开发标准gui界面,比mFc的开发效率至少高一个数量级。
因为qt库比mFc庞大很多,而且qt的许多机制比mFc先进很多。
如果认为qt仅仅是一个跨平台界面库,那就小看它了。
我要说的是,它不但是一个通用的跨平台的面向对象的应用程序接口库(包括gui、数据库、网络、多线程、xml、数据容器和算法等,常用的编程资源都有封装,就是说,这些都可以跨平台,而不仅仅是界面),更是一种c++语言的扩展,一种编程平台和应用程序框架。
信号和槽的机制简化了对象之间的通信,比mFc的消息映射直观多了;
界面的布局管理机制使开发人员可以很轻松地编出优雅的窗体;
界面语言翻译机制也很方便实用;
qobject容器管理可以看到qt在内存管理方面的努力;
扩展的foreach循环结构也向现代语言靠拢;
qt在界面层多封装了一层qstyle,开发者甚至可以使用css定制出一套界面来……如果仅仅是开发标准的gui(使用通用的控件),开发效率会很高,接近于.net窗口编程。
第三,qt自带的控件库比mFc丰富多了,而且还有很多扩展库和第三方的控件库,同样是lgpl开源的。
qt提供了Vs各个版本的插件,因此在Vs上开发qt程序比使用其它ui库方便很多。
第四,运行效率问题。
qt使用了很多高级机制,使它的效率确实比mFc。
比如,qt在界面层多封装了一层qt样式,在运行时可以使用不同风格的样式,即类似于换肤功能(不同的是,它由qt框架直接提供)。
所以执行效率比不上原生操作系统的界面库(如mFc、wxwidgets等)。
但是,qt界面库的效率还是比wpF、.net、java高几个数量级的,毕竟qt开发出来的是机器码,不是虚拟机或解释程序可以比拟的。
第五,程序大小的问题。
qt库的确很大,最基本的两个动态库文件,qtcore4.dll有2m多,qtgui4.dll有7m多(4.6.2),所以在发布软件的时候,还要带上这些动态库文件。
当然,使用qt静态链接库要好一点。
至于使用静态链接好,还是使用动态链接好,这里我不加讨论,没有最好,只有最适合的(mFc也有这个问题)。
第六,跨平台问题。
跨平台的确很诱人,尤其是做嵌入式设备的。
楼主的项目是什么我不了解,因此这里不妄加评论跨平台问题。
第七,人才问题和培训问题。
在中国,mFc/win32开发人员是最多的(不谈虚拟机平台编程),因为学校学的就是这个。
而会qt的真的很少。
不过鉴于nokia的大力支持和开源为lgpl的手段,我相信会qt的会越来越多。
qt的学习也不会想像中的难,毕竟它只是一个库(应用程序框架)而已,上手不会太难,不会比mFc久。
第八,帮助资源问题。
qt的资源很丰富,其自带的assistant相当于微软的msdn,各个接口和编辑元素的说明都很详细,不过都是英文的,跟mFc一样。
网上qt社区也不少。
毕竟,qt比mFc,甚至比windows还年长!
最后,声明一下,我不是qt的枪手。
程序员无枪手。
他们都很纯朴。
我们公司仍然在使用mFc,但是嵌入式设备装上一个正版windowsxpe,毕竟太奢侈了。
另外用mFc做界面真的很痛苦,我们公司的好几个项目都在向qt转型。
在界面库选型上,我们也花了不少时间,从开源的wxwidgets,到商业的一些大大小小的界面库,最后选中qt。
浅析qt对象模型
qt的特性是通过