范新剛 姚 新 胡海燕
(上海船舶電子設備研究所 上海 201108)
?
VxWorks環境下基于Qt的聲納信息顯示設計*
范新剛姚新胡海燕
(上海船舶電子設備研究所上海201108)
文章提出了一種在嵌入式VxWorks環境下,基于Qt圖形化視圖框架的聲納信息顯示的新方法。實現基于Qt圖形化視圖框架的聲納信息顯示,使得圖形用戶界面具有信息顯示實時和程序架構簡單的優點。VxWorks下利用Qt進行窗口圖形界面開發的方法,成功地解決了嵌入式系統下圖形界面開發困難的問題。
VxWorks;Qt;聲納信息顯示
Class NumberTB556
VxWorks操作系統是美國風河公司(Wind River Systems Inc)設計開發的一種嵌入式實時操作系統,良好的持續發展能力、高性能的內核以及友好的用戶開發環境,使VxWorks在嵌入式實時操作系統領域占據一席之地,廣泛應用在通信、數字圖像設備軍事、航空和航天等高精尖及實時性要求極高的領域中[4]。
但是VxWorks下使用WindML開發復雜的圖形界面,需要程序員編寫大量的代碼,對控件的實現都需要調用底層的作圖函數進行繪制,造成了開發周期長的問題。而Qt具有優良的跨平臺特性,可以一次編寫,隨處編譯;良好封裝機制;Signal—Slot連接的事件驅動機制;提供Qt Designer工具開發界面,便于程序開發等。在圖元層,而對于背景地圖等無需頻繁更新的圖層本文中使用Qt進行窗口圖形界面開發的方法,實現基于Qt圖形化視圖框架的聲納信息顯示,使得圖形用戶界面具有信息顯示實時,程序架構更加簡單[1]。
本文不考慮聲納圖像顯示。對于點跡、航跡等實時更新的信息顯示,采用Qt圖形化視圖框架中Graphics View / Item機制進行處理并將其繪制信息,可以將其繪制在背景層或前景層。對于操作界面,可以利用Qt Designer進行設計并借助于Style Sheet屬性對其美化[3]。
本文重點討論在VxWorks6.6下用Qt 4.5.0進行窗口圖形界面開發的方法。
Qt是一個多平臺的C++圖形用戶界面應用程序框架,它提供給開發者建立藝術級的圖形用戶界面所需的所用功能,以下是在VxWorks中使用Qt實現圖形化工程的基本原理。
2.1Qt圖形界面應用程序的配置與編譯
WindML是一個適用于VxWorks下開發圖形用戶界面的媒體庫,WindML通過提供一系列的圖形API函數,以及鼠標、鍵盤、字體和顯示芯片的驅動,使得用戶可以在嵌入式系統設備上實現圖形用戶界面[5]。在使用Qt之前必須先根據目標機配置情況及應用需求來對WindML的處理器類型、圖形設備、輸出設備等進行配置,配置完成后編譯WindML生成相應的目標文件[2]。
完成WindML的配置和編譯后,根據工程應用需求對VxWorks進行配置,將C++ Components、POSIX Message Queues、POSIX Semaphores選擇包含進VxWorks工程中,編譯生成VxWorks映像。基于Qt圖像應用開發,需要將WindML的相關組件2D graphics和complete 2D library選擇包含進VxWorks工程中[6]。
利用Qt進行圖形界面應用程序的開發,需要對WindML進行相應的配置、編譯和連接,并完成VxWorks操作系統配置[8]。首先用戶使用Qt提供的可視化設計工具來構建相應的圖形操作界面,生成.pro工程文件,在用make等Qt相關操作生成.cpp和.h文件;然后在WorkBench3.0編譯環境下將進行編譯和鏈接生成最終的應用程序目標碼。編譯界面如下圖1所示。

圖1 Qt圖形界面應用程序編譯示意圖
2.2圖形界面應用程序開發
圖形界面的開發主要通過Qt Designer來實現,Qt提供了大量的圖形控件,用戶以拖放的方式從控件面板添加相應的控件對象,通過雙擊控件的方式打開控件屬性編輯框,通過控件屬性編輯框,用戶可以設定控件的標題、位置、顏色、圖片、字體、BOX類型、事件響應方式等屬性[7]。界面設計完成之后,用戶可以進行界面效果的預覽。利用Qt可視化界面設計工具設計好圖形界面后,接下來就是在此基礎上進行圖形界面應用程序的編寫。
聲納信息顯示主要包括點跡、航跡、聲納圖像、背景地圖以及矢量圖形等信息顯示。本文中的聲納圖像實時顯示功能借助于硬件手段實現,故不再描述。對于點跡、航跡,由于其信息實時更新,因此可以使用作為圖元繪制在圖元層[12];而對于背景地圖等不經常改變的信息,繪制于背景層。
3.1點跡和航跡顯示
由于點跡和航跡顯示方法類似,故以點跡顯示為例[9],從基類QGraphicsItem中派生一個用戶定制的圖元類QGraphicsPlotItem表示聲納點跡對象。用QGraphicsPlotItem成員變量表征點跡屬性,用QGraphicsPlotItem成員函數定制點跡操作。每個點跡用一個QGraphicsPlotltem對象來表示,然后建立一個點跡鏈QPlotLink保存所有點跡信息。當收到一個新點跡時,在點跡鏈QPlotLink前插入一個QGraphicsPlotItem對象表示該點跡,并調用setPos()函數設置其場景位置,然后調用addItem()函數將QGraphicsPlotItem對象添加到場景中并在視圖顯示。若點跡消失,此時需要將QPlotLink鏈表中最后一個單元刪除,并調用QGraphicsScene的函數removeItem()將該對象從場景中刪除。
3.2背景信息顯示
本應用實例中,背景信息為電子海圖,不需要經常改變的。故使用QPixmap類進行背景顯示,創建一個QPixmap類的對象指針pPixmap,然后將背景路徑信息進行設置[11],例如QPixmap(QObject::tr ("/Dos/icon.bmp")),然后在調用setPixmap()函數將背景添加到場景中并顯示。
3.3矢量圖形顯示
在聲納信息顯示中,常需繪制刻度線輔助目標測量,如距離刻度線、方位刻度線,具有特定功能的區域,如參數區、目標區等。Qt提供底層的繪圖類QPainter。該類既可以繪制簡單的直線,也可以繪制復雜的圖形。如提供drawline()函數繪制直線,drawPic()繪制扇形,drawText()繪制文本,drawPath()繪制復雜圖形。對于距離刻度線,通過調用drawLine()即可實現,對于方位刻度線,在PPI顯時可以調用drawEIlipse()函數繪制圓形[10]。并將以上繪制函數放入QPaintEvent事件中來調用即可。
3.4應用程序實例
本實例為一個窗口應用,采用Qt4.5.0進行聲納信息顯示軟件開發,其顯示界面如圖2所示。通過實際應用可以發現其信息顯示和戰術操作完全滿足聲納信息顯示的需要。本實例界面中包含有一個菜單條控件、一個表格控件以及六個按鈕控件。通過點擊顯示目標信息按鈕可以在表格控件中實時顯示目標的相關信息,表格控件的內容是動態更新的。通過點擊顯示按鈕可以實時顯示設備的參數信息。通過相應的菜單選項可以進行目標信息的查看等。

圖2 聲納應用實例窗口界面
Qt為用戶提供了一套完整的嵌入式人機界面解決方案,其簡潔高效的程序界面設計方式,大大減輕了程序設計人員進行界面設計的勞動強度,提高了程序開發效率。本文介紹了Qt圖形界面開發工具,分析了利用該工具進行用戶界面設計以及相應的應用程序的開發過程。通過實際工程應用表明,Qt在功能和性能方面能夠滿足基于VxWorks的實時系統窗口圖形界面開發要求,在嵌入式系統圖形開發方面有著廣泛的應用前景。
[1]孔祥營,柏桂枝.嵌入式實時操作系統VxWorks及其開發環境[M].北京:中國電力出版社,2002:156-160.
[2]陳智育,溫彥軍,陳琪.VxWorks程序開發實踐[M].北京:人民郵電出版社,2004:210-225.
[3]申成祎.基于VxWorks操作系統的WindML 2D顯示方案[J].電腦開發與應用,2004,10(6):45-47.
[4]周曉光,翟尹羚.基于嵌入式Linux下的MiniGUI的應用[J].電腦知識與技術,2005,35(10):96-97.
[5]梁勇,孟橋.嵌入式操作系統VxWorks中的顯控程序設計[J].電子工程師,2002,28(12):7-9.
[6]張娜歡,葉經方,嚴雋鈺.MiniGUI在電力通信服務器中的應用[J].電子工程師,2007,33(12):50-52.
[7]張升,陶維青.嵌入式圖形用戶界面MiniGUI[J].儀器儀表用戶,2004,11(6):82-84.
[8]蔡華,卞新高,史中權.基于VxWorks的WindML圖形界面開發方法[J].工業控制計算機,2005,18(8):28-30.
[9]李海亮,石鵬程.VxWorks的WindML圖形界面程序的框架分析[J].工業控制計算機,2007,20(1):46-47.
[10]曾虹,吳新華,張翔.基于MiniGUI的數據采集卡應用系統的開發[J].杭州電子科技大學學報,2007,27(1):54-58.
[11]汪麗云,徐曉蘇.基于VxWorks的PCI設備驅動程序開發[J].艦船電子工程,2006,26(1):87-90.
[12]陳恩慶,王忠勇,宋豫冀.VxWorks下圖形用戶界面的開發[J].微計算機信息:測控儀表自動化,2003,19(3):48-49.
Design of Sonar Information Display Based on Qt in VxWorks
FAN XingangYAO XinHU Haiyan
(Shanghai Marine Electric Equipment Institute,Shanghai201108)
In order to find a solution to the difficulty about graphical interface development of embedded system,this article discusses the development ways of VxWorks graphical interface development based on Qt,analyzes the Qt’s principle of work and development flow,then presents an application example.Engineering application proves that Qt has powerful function and its usage is convenient.Also,it is a good solution of embedded system graphical interface development.
VxWorks,Qt,sonar information display
2016年3月16日,
2016年4月27日
范新剛,男,碩士,工程師,研究方向:嵌入式系統顯控設計。姚新,男,高級工程師,研究方向:信號處理。胡海燕,女,碩士,高級工程師,研究方向:顯控設計。
TB556DOI:10.3969/j.issn.1672-9730.2016.09.022