(中国电子科技集团公司第二十八研究所 南京 210007)
麒麟操作系统是国防科技大学计算机学院自上世纪80年代以来围绕“银河”高性能计算机开发的操作系统。该操作系统稳定可靠地运行了气象、石油勘探等图形应用/模拟软件,与Windows图形开发的技术架构体制对比如图1所示[1]。
图1 麒麟-图形架构技术体系
麒麟操作系统内核为Linux(2.2-2.6)kernel,采用X-window 图形服务系统,其上扩充了KDE、GNOME、GTK+等图形框架库。与Windows图形架构相比,X 是一种标准,便于第三方支持并加强其功能。易于安装、改版,不会对其他应用程序造成干扰。程序的异常中断只会影响到窗口系统,不会造成机器的损坏或操作系统内核的破坏。内在的图形绘制处理机制如图2[2]:
图2 Linux平台绘图处理机制
采用事件驱动方式,异步编程。用户通过输入设备将绘图事件发送到图形服务器X-Server,图形服务器依据用户提出的绘图事件填入相应的数据结构,并将该数据结构通过事件消息发送至绘图客户端X-Client,绘图客户端执行绘图操作,将绘图结果以请求的方式发送到X-Server进行解析,而后调用绘图设备,执行绘制[3]。
开发语言可采用C++\QT,QT 是一个跨平台的C++图形用户界面应用程序框架,由挪威TrollTech 公司出品,完全面向对象,易扩展,允许组件编程,编写方便,并提供IDE开发工具。在Windows平台下使用QT,要向TrollTech公司支付一定的费用,但QT在LINUX下免费,所以在国产麒麟操作系统下可以免费安装使用,本文的具体实现所采用的开发工具是麒麟操作系统3.2.1版内置的QT4.3[4]。
某应用系统在Windows平台下已完成研发。该软件基于现有成熟的图形框架,可以在图上实现标号的标绘、与表格的关联、以及标号的图上操作:包括移动、闪烁、右键菜单等。在图形框架基础上,可以完成一系列相关业务处理功能。现将该应用系统功能在国产麒麟操作系统下重新实现,图形框架的移植是关键。
Windows平台下的图形框架是一套比较完备的技术体系,在短期内整体迁移的难度很大。本文参照Windows平台下的图形框架,在麒麟操作系统下,通过QT 开发工具,使用其提供的一系列图形开发库,简要实现了图形操作的基本功能,可以满足最基本的应用要求[5]。
在具体的技术实现中,主要考虑如下几个问题:
Windows平台下的图形框架支持大量的图形文件,包括像素图、矢量图、位图等。每一种图形文件都需要相应的图形函数做处理。为了实现其最基本的功能,本文截取了谷歌(Google)地图江苏-安徽一段区域的位图,如图3。
图3 江苏-安徽地区
通过谷歌地图提供的数据支撑,可以获取该段地图区域左上角与右下角的经纬度,以此为基准,可以大致计算出鼠标在图上任意一点的经纬度(假设这一块区域可看成近似平面),假设图形坐标原点在图的中心,则经纬度近似计算式为[6]
其中:y1为左上角纬度,y2为右下角纬度,x1为左上角经度,x2为右下角经度,h为图片高度,w为图片宽度,p.x(p.y):鼠标当前在图上的位置(图中心为坐标原点)。
图上操作
通过调用QT 提供的一系列图形开发库,可实现图的放大、缩小、漫游以及相应鼠标滑动事件实时显示鼠标坐标位置。
图4 图上操作
在滑块移动过程中,通过调用QT 图形界面库提供的scale函数,实现对位图的放大与缩小。同时,利用(1)所提供的计算公式计算出鼠标所处位置经纬度,通过QT封装的鼠标事件 QMouseEvent, 重 载 mouse-MoveEvent (QMouseEvent*)函数,实现跟踪鼠标移动,实时显示鼠标位置的功能,关键代码如下[7]:
由于目前基于国产麒麟操作系统,还未开发出完整的标号库资源,所以只能通过绘图工具绘制某应用系统所需的标号,包括遮蔽顶、阻击点\线、安全区、地形点、导航点等,绘制完毕后通过QT 封装的鼠标事件QMouseEvent的响应函数,调用QT 图形界面提供setItem 方法,将所标绘标号显示在预定位置。
图5 标号操作
通过QT 提供的时间响应事件timerEvent可以设置标号的周期显示,实现在图上的闪烁。通过QT 提供的图标方法:setFlag(QGraphicsItem::ItemIsSelectable),
设置标号为可移动,实现标号在图上的位移,标号在移动过程中经纬度的变化与其对应表格位置属性关联。关键代码如下[8]:
图6 迁移后的某应用系统
上述基于麒麟操作系统的图形设计与开发方法为应用提供了较为简单的底层支撑。某应用系统可以在此基础上完成从Windows系统到麒麟操作系统的局部迁移。迁移后的界面如图6所示。该迁移实验基于麒麟操作系统3.2.1版本,采用QT 开发工具,基本上完成了原Windows平台下所有界面元素的迁移。自行设计与开发的图形功能要弱于Windows平台下的图形框架,但能满足图形标绘最基本的需要。
本文的设计与实现并不能直接作为产品发布,仅具有原型参考价值,而且没有国产数据库的支撑,很难应用于实际。随着应用系统国产化的推进,后续将结合国产数据库完成内部所需的数据元素的国产化迁移与该应用系统内在的底层算法的迁移[10]。比较而言,该应用系统内在的底层算法采用C/C++语言编写,在国产麒麟操作系统下重新编译即可,较为方便,这也是下一步实现的目标[9]。
[1]郝慧明,李海.基于Linux和Qt/E的数字集群终端软件框设计与实现[J].移动通信,2012,(6):74-77.
[2]王浩南,刘益成.基于嵌入式Linux系统下的Qt开发[J].电脑开发与应用,2010(01):11-13.
[3]张轩,余亮.基于wxWidgets库的界面跨平台实现[J].现代电子工程,2013(01):13-15.
[4]陈超,陈彬,孟剑萍,等.基于GPU 大规模遥感图像的几何校正[J].指挥信息系统与技术,2012,3(1):76-79.
[5]朱汉群,苏厚勤,吴丰科.Linux GUI开发工具GTK+技术应用研究[J].计算机应用于软件,2009,6(1):137-140.
[6]黄哲,陈多.Linux下的图形界面编程的实现[J].湖南工程学院学报,2006,16(1):58-60.
[7]王子强,刘海燕,李媛州,等.Linux下图形用户界面程序的开发与实现[J].计算机应用与软件,2005,22(6):81-83.
[8]唐飞,李玉文,刘孙东,等.基于嵌入式Linux的图形用户界面移植与开发[J].深圳信息职业技术学院学报,2008,6(2):38-41.
[9]游华云,叶佩青,杨开明,等.基于RTLinux的软件PLC的研究与开发[J].计算机工程与应用,2002(22):134-136.
[10]黄穗.用Tcl%2fTk开发Linux下的图形界面应用[J].计算机工程与设计,2002,23(1):52-54.