首页| 论坛| 消息
主题:基于Qt的组态监控软件实现以及分析
回帖:组态软件本质上就是实现一个矢量图形编辑器,实现若干个基本图元,例如矩形、圆、线、多边形、位图、连接线,然后基于这些基本图元可以组合为任意的新的图元,即组合图元(group);组合图元本身也是图元,这正是经典的组合模式。每个图元一般会关联到实时数据库中的一个点或者一个对象,然后定时或者其它方式刷新这些值,根据这些值的不同图元则显示为不同的形状或颜色或其它,此所谓的监视,而控制的实现一般为当点击某按钮时向实时库或者前置机发送一个命令。软件一般分为两个部分,即编辑器部分和运行态部分,编辑器支持基本的编辑功能,例如移动、选中、copy-cut-paste、成组、放大缩小、旋转、等等,经编辑后,保存为某种格式,而运行态组件多实现为dll,其加载编辑器生成的文件,显示运行,没有编辑功能,当然也是不允许编辑的。一般组态软件都包含一个脚本系统,以应对很多个性化的东西,有了脚本系统,组态软件通常看起来都很强大,可以做一些简单的游戏,等等等等,实际上其实现往往并不复杂。
选择Qt做组态软件的原因:
1、 天然的跨平台,目前很多监控软件都要求运行于Unix系统,尤其是在电力行业。
2、 Qt提供的Graphics View模块好像为组态软件的实现量身定做,呵呵,应用该模块,效率非常高,支持数十万级别的item。
3、 QSA脚本,与Qt的天然集成,太完美了。
4、 Qt提供的undo模块,经典的命令模式的实现,用在组态软件的undo、redo不费吹灰之力。
5、 这些还不够吗,以上任何一点都够一个开发小组工作一段时间,更重要的是重复发明轮子的意义到底有多大?轮子也未必正常行驶,呵呵
设计时几个主要的环节:
1、 组合模式,即若干图元的组合还是一个图元,这个有QGraphicsItemGroup这个类,基本上工作量小的多了
2、 命令模式,即undo/redo的实现,当然有了QUndoStack这些类,就容易的多
3、 图元大小的改变,即可以由鼠标的拖动改变一个图元的大小,这个相对难一点,因为矩形、椭圆、线处理方式不一样,要分开处理
4、 QGraphicsItem的扩展,由于所有的item都是基于这个类的,但是我们在实现的时候往往需要更多的虚函数,这个实现可以说是必须的,在实现的时候也想到的几种方法,比如扩展某一个虚函数,比如多继承,或者修改Qt这部分的源代码,最后采用的是一种非继承的组合方法即MyItem基类,包含一个QGraphicsItem *成员,这个是目前个人感觉最好的办法。
5、 模版实现,即若干图元组合后的新图元可以保存到模版,用的时候拖放过来即可。
6、 保存格式,一般由二进制、xml文件,这两种各有优缺点,我则直接保存为qsa脚本,load进来后页面也建立了,兼两种格式的优点。
7、 最后用这个软件玩玩游戏、画画图,做个打砖块游戏,画些河流山川房子,不亦乐乎!
下一楼›:保留。
呵呵,其实、参数库、实时数据、包括各个服务等等都可以做成可组态的,系统可以面向 ..

查看全部回帖(38)
«返回主帖