(中國電子科技集團公司第二十八研究所 南京 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.