(中國電子科技集團公司第二十八研究所 南京 210007)
麒麟操作系統(tǒng)是國防科技大學(xué)計算機學(xué)院自上世紀80年代以來圍繞“銀河”高性能計算機開發(fā)的操作系統(tǒng)。該操作系統(tǒng)穩(wěn)定可靠地運行了氣象、石油勘探等圖形應(yīng)用/模擬軟件,與Windows圖形開發(fā)的技術(shù)架構(gòu)體制對比如圖1所示[1]。
圖1 麒麟-圖形架構(gòu)技術(shù)體系
麒麟操作系統(tǒng)內(nèi)核為Linux(2.2-2.6)kernel,采用X-window 圖形服務(wù)系統(tǒng),其上擴充了KDE、GNOME、GTK+等圖形框架庫。與Windows圖形架構(gòu)相比,X 是一種標準,便于第三方支持并加強其功能。易于安裝、改版,不會對其他應(yīng)用程序造成干擾。程序的異常中斷只會影響到窗口系統(tǒng),不會造成機器的損壞或操作系統(tǒng)內(nèi)核的破壞。內(nèi)在的圖形繪制處理機制如圖2[2]:
圖2 Linux平臺繪圖處理機制
采用事件驅(qū)動方式,異步編程。用戶通過輸入設(shè)備將繪圖事件發(fā)送到圖形服務(wù)器X-Server,圖形服務(wù)器依據(jù)用戶提出的繪圖事件填入相應(yīng)的數(shù)據(jù)結(jié)構(gòu),并將該數(shù)據(jù)結(jié)構(gòu)通過事件消息發(fā)送至繪圖客戶端X-Client,繪圖客戶端執(zhí)行繪圖操作,將繪圖結(jié)果以請求的方式發(fā)送到X-Server進行解析,而后調(diào)用繪圖設(shè)備,執(zhí)行繪制[3]。
開發(fā)語言可采用C++\QT,QT 是一個跨平臺的C++圖形用戶界面應(yīng)用程序框架,由挪威TrollTech 公司出品,完全面向?qū)ο螅讛U展,允許組件編程,編寫方便,并提供IDE開發(fā)工具。在Windows平臺下使用QT,要向TrollTech公司支付一定的費用,但QT在LINUX下免費,所以在國產(chǎn)麒麟操作系統(tǒng)下可以免費安裝使用,本文的具體實現(xiàn)所采用的開發(fā)工具是麒麟操作系統(tǒng)3.2.1版內(nèi)置的QT4.3[4]。
某應(yīng)用系統(tǒng)在Windows平臺下已完成研發(fā)。該軟件基于現(xiàn)有成熟的圖形框架,可以在圖上實現(xiàn)標號的標繪、與表格的關(guān)聯(lián)、以及標號的圖上操作:包括移動、閃爍、右鍵菜單等。在圖形框架基礎(chǔ)上,可以完成一系列相關(guān)業(yè)務(wù)處理功能。現(xiàn)將該應(yīng)用系統(tǒng)功能在國產(chǎn)麒麟操作系統(tǒng)下重新實現(xiàn),圖形框架的移植是關(guān)鍵。
Windows平臺下的圖形框架是一套比較完備的技術(shù)體系,在短期內(nèi)整體遷移的難度很大。本文參照Windows平臺下的圖形框架,在麒麟操作系統(tǒng)下,通過QT 開發(fā)工具,使用其提供的一系列圖形開發(fā)庫,簡要實現(xiàn)了圖形操作的基本功能,可以滿足最基本的應(yīng)用要求[5]。
在具體的技術(shù)實現(xiàn)中,主要考慮如下幾個問題:
Windows平臺下的圖形框架支持大量的圖形文件,包括像素圖、矢量圖、位圖等。每一種圖形文件都需要相應(yīng)的圖形函數(shù)做處理。為了實現(xiàn)其最基本的功能,本文截取了谷歌(Google)地圖江蘇-安徽一段區(qū)域的位圖,如圖3。
圖3 江蘇-安徽地區(qū)
通過谷歌地圖提供的數(shù)據(jù)支撐,可以獲取該段地圖區(qū)域左上角與右下角的經(jīng)緯度,以此為基準,可以大致計算出鼠標在圖上任意一點的經(jīng)緯度(假設(shè)這一塊區(qū)域可看成近似平面),假設(shè)圖形坐標原點在圖的中心,則經(jīng)緯度近似計算式為[6]
其中:y1為左上角緯度,y2為右下角緯度,x1為左上角經(jīng)度,x2為右下角經(jīng)度,h為圖片高度,w為圖片寬度,p.x(p.y):鼠標當(dāng)前在圖上的位置(圖中心為坐標原點)。
圖上操作
通過調(diào)用QT 提供的一系列圖形開發(fā)庫,可實現(xiàn)圖的放大、縮小、漫游以及相應(yīng)鼠標滑動事件實時顯示鼠標坐標位置。
圖4 圖上操作
在滑塊移動過程中,通過調(diào)用QT 圖形界面庫提供的scale函數(shù),實現(xiàn)對位圖的放大與縮小。同時,利用(1)所提供的計算公式計算出鼠標所處位置經(jīng)緯度,通過QT封裝的鼠標事件 QMouseEvent, 重 載 mouse-MoveEvent (QMouseEvent*)函數(shù),實現(xiàn)跟蹤鼠標移動,實時顯示鼠標位置的功能,關(guān)鍵代碼如下[7]:
由于目前基于國產(chǎn)麒麟操作系統(tǒng),還未開發(fā)出完整的標號庫資源,所以只能通過繪圖工具繪制某應(yīng)用系統(tǒng)所需的標號,包括遮蔽頂、阻擊點\線、安全區(qū)、地形點、導(dǎo)航點等,繪制完畢后通過QT 封裝的鼠標事件QMouseEvent的響應(yīng)函數(shù),調(diào)用QT 圖形界面提供setItem 方法,將所標繪標號顯示在預(yù)定位置。
圖5 標號操作
通過QT 提供的時間響應(yīng)事件timerEvent可以設(shè)置標號的周期顯示,實現(xiàn)在圖上的閃爍。通過QT 提供的圖標方法:setFlag(QGraphicsItem::ItemIsSelectable),
設(shè)置標號為可移動,實現(xiàn)標號在圖上的位移,標號在移動過程中經(jīng)緯度的變化與其對應(yīng)表格位置屬性關(guān)聯(lián)。關(guān)鍵代碼如下[8]:
圖6 遷移后的某應(yīng)用系統(tǒng)
上述基于麒麟操作系統(tǒng)的圖形設(shè)計與開發(fā)方法為應(yīng)用提供了較為簡單的底層支撐。某應(yīng)用系統(tǒng)可以在此基礎(chǔ)上完成從Windows系統(tǒng)到麒麟操作系統(tǒng)的局部遷移。遷移后的界面如圖6所示。該遷移實驗基于麒麟操作系統(tǒng)3.2.1版本,采用QT 開發(fā)工具,基本上完成了原Windows平臺下所有界面元素的遷移。自行設(shè)計與開發(fā)的圖形功能要弱于Windows平臺下的圖形框架,但能滿足圖形標繪最基本的需要。
本文的設(shè)計與實現(xiàn)并不能直接作為產(chǎn)品發(fā)布,僅具有原型參考價值,而且沒有國產(chǎn)數(shù)據(jù)庫的支撐,很難應(yīng)用于實際。隨著應(yīng)用系統(tǒng)國產(chǎn)化的推進,后續(xù)將結(jié)合國產(chǎn)數(shù)據(jù)庫完成內(nèi)部所需的數(shù)據(jù)元素的國產(chǎn)化遷移與該應(yīng)用系統(tǒng)內(nèi)在的底層算法的遷移[10]。比較而言,該應(yīng)用系統(tǒng)內(nèi)在的底層算法采用C/C++語言編寫,在國產(chǎn)麒麟操作系統(tǒng)下重新編譯即可,較為方便,這也是下一步實現(xiàn)的目標[9]。
[1]郝慧明,李海.基于Linux和Qt/E的數(shù)字集群終端軟件框設(shè)計與實現(xiàn)[J].移動通信,2012,(6):74-77.
[2]王浩南,劉益成.基于嵌入式Linux系統(tǒng)下的Qt開發(fā)[J].電腦開發(fā)與應(yīng)用,2010(01):11-13.
[3]張軒,余亮.基于wxWidgets庫的界面跨平臺實現(xiàn)[J].現(xiàn)代電子工程,2013(01):13-15.
[4]陳超,陳彬,孟劍萍,等.基于GPU 大規(guī)模遙感圖像的幾何校正[J].指揮信息系統(tǒng)與技術(shù),2012,3(1):76-79.
[5]朱漢群,蘇厚勤,吳豐科.Linux GUI開發(fā)工具GTK+技術(shù)應(yīng)用研究[J].計算機應(yīng)用于軟件,2009,6(1):137-140.
[6]黃哲,陳多.Linux下的圖形界面編程的實現(xiàn)[J].湖南工程學(xué)院學(xué)報,2006,16(1):58-60.
[7]王子強,劉海燕,李媛州,等.Linux下圖形用戶界面程序的開發(fā)與實現(xiàn)[J].計算機應(yīng)用與軟件,2005,22(6):81-83.
[8]唐飛,李玉文,劉孫東,等.基于嵌入式Linux的圖形用戶界面移植與開發(fā)[J].深圳信息職業(yè)技術(shù)學(xué)院學(xué)報,2008,6(2):38-41.
[9]游華云,葉佩青,楊開明,等.基于RTLinux的軟件PLC的研究與開發(fā)[J].計算機工程與應(yīng)用,2002(22):134-136.
[10]黃穗.用Tcl%2fTk開發(fā)Linux下的圖形界面應(yīng)用[J].計算機工程與設(shè)計,2002,23(1):52-54.