摘 要:介紹調用C++類庫Qt進行數值模擬軟件開發的方法。首先介紹Qt及其圖形庫Qwt;其次對脈沖束輻照材料熱力學效應軟件GUI的設計做了詳細說明,并給出數據文件的輸入、輸出方法;最后根據計算結果調用Qwt庫顯示出處理需要的圖形?;赒t的軟件開發表明:Qt在數值計算軟件開發中具有很強的優勢,適合作為數值計算軟件GUI開發的工作平臺。
關鍵詞:Qt;數值模擬軟件;C++;GUI;Qwt
中圖分類號:TP3919文獻標識碼:B
文章編號:1004-373X(2010)02-080-04
Application of Qt in Exploitation of Numerical Simulation Software
YUAN Yuan,WANG Yanhong,JIANG Ling,JIANG Yang
(Northwest Institute of Nuclear Technology,Xi′an,710024,China)
Abstract:The exploitation method of numerical analog software based on C++ class libraries Qt is introduced.Firstly,Qt and its graphic libraries Qwt are presented.Secondly,the design of GUI of the impulse radiant material thermodynamics effect software is explained in detail.Thirdly,the input and output means of the data files are given.Finally,the visualization graphics produced by Qwt libraries is shown.During the exploitation of the software,it can be concluded that Qt has more advantages in the development of numerical analog software.So it is suitable to be the development platform of numerical analog software.
Keywords:Qt;numerical analog software;C++;GUI;Qwt
0 引 言
國內目前主流的GUI庫是Visual C++自帶的微軟基礎類庫(MFC),由于微軟的商業考慮使得MFC缺乏平臺無關性,致使MFC無法適用于跨平臺軟件系統的開發。而開源的TrollTech Qt類庫則具有極強的平臺無關性和優良的面向對象特性,在跨平臺軟件系統的開發中具有絕對優勢。
Qt 是一個交叉開發平臺,從某種意義上說,Qt類庫是為幾種不同的操作系統設計的。Qt 所有平臺的 API 是一致的,這就意味著在一種平臺上編寫的應用程序,在新的平臺上經過重新編譯和連接便能運行。因此,軟件開發者只需通過開發和維護一種平臺的應用源碼,便可開發出適用于多種平臺的軟件[1]。
這里簡要介紹Qt類庫及其信號和槽的機制,結合脈沖束輻照材料熱力學效應GUI開發闡述了Qt類庫在數值模擬軟件開發中的優勢,為探索一條行之有效的跨平臺數值模擬軟件開發途徑打下基礎。
1 Qt類庫簡介
1.1 Qt類庫簡介
Qt是挪威TrollTech公司推出的一個跨平臺的C++圖形用戶界面庫,包括Qt,基于Framebuffer的Qt Embedded,快速開發工具Qt Designer,國際化工具Qt Linguist等部分。Qt類似于Window上的Motif,Openwin,GTK等圖形界面庫及Windows平臺上的MFC,OWL,VCL,ATL等[2]。Qt還具有下列優點:
(1) 優良的跨平臺特性。Qt支持下列操作系統:Microsoft Windows 95/98,Microsoft Windows NT,Linux,Solaris,SunOS,HP_UX,Digital UNIX(OSF/1,Tru64),Irix,FreeBSD,BSD/OS,SCO,AIX,OS390,QNX等[3]。
(2) 面向對象。Qt良好的封裝機制使得其模塊化程度非常高,可重用性較好,便于用戶的開發。Qt提供了一種稱為signals/slots的安全類型來替代回調callback,這使得各個元件之間的協同工作變得十分簡單[4]。
(3) 豐富的API。Qt包括多達250個以上的C++類,還提供基于模板的collections,serialization,file,I/O device,directory management,date/time類,甚至還包括正則表達式的處理功能。
(4) 支持2D/3D圖形渲染,支持OpenGL及XML[5]。
(5) 具有大量的開發文檔。
1.2 Qt信號和槽的機制
在圖形用戶界面編程中,程序員經常希望一個窗口部件的變化被通知給另一個窗口部件。更一般地,希望任何一類的對象可以和其他對象進行通信。較老的工具包使用一種被稱作回調的通信方式來達到這一目的?;卣{是指一個函數指針,如果希望一個處理函數通知你一些事件,可以把另一個函數(回調)的指針傳遞給處理函數,處理函數在適當時調用回調[6]?;卣{有兩個主要缺點,首先它們不是類型安全的,編譯系統不能確定處理函數使用了正確的參數來調用回調;其次,回調和處理函數是非常強有力地聯系在一起的,因為處理函數必須知道要調用哪個回調[7]。
在Qt中使用一種可以替代回調的技術即信號和槽。信號和槽機制是Qt的一個主要特征,并且也是它與其他工具包最不相同的部分。Qt的窗口部件有很多預定義的信號,也可以通過繼承來加入自己的信號,當一個特定事件發生時,一個信號即被發射。槽則是一個可以被調用處理特定信號的函數,Qt的窗口部件有很多預定義的槽,但是通常的習慣是加入自己的槽,這樣就可以處理自己感興趣的信號,通過信號和槽的連接實現對象間的通信。信號和槽的機制是類型安全的:一個信號的簽名必須與它的接收槽的簽名相匹配。因為簽名是一致的,編譯器就可以幫助檢測類型是否匹配。信號和槽是寬松地聯系在一起的,一個發射信號的類不需要知道也不需要注意哪個槽要接收這個信號。Qt信號和槽的機制可以保證,如果把一個信號和一個槽連接起來,槽就會在正確的時間使用信號的參數而被調用,信號和槽可以使用任何數量、任何類型的參數,它們是類型安全的,不會再有回調核心轉儲(Core Dump) [8]。
1.3 Qwt圖形庫簡介
Qwt類庫是對Qt圖形庫的一種有益的擴展,主要是為開發科學領域方面的軟件提供實用的組件庫。Qwt包括各種2D圖形顯示組件及配套的控件,如刻度、旋轉體、羅盤、滑尺以及用于相應曲線顯示的數據類等。Qwt屬于SourceForge下的一個類庫項目,能夠使用在各種平臺下,包括32 b MSWindows (95/98/NT/2000/XP),POSIX OS (Linux/BSD/Unix_like OSes),OSX等。它的發布基于Qwt License(Version 1.0)協議,軟件開發人員可以在遵守相應條例的基礎上,自由地使用它進行軟件系統的開發[9]。
使用Qwt庫繪制的收音機的調節按鈕、表盤和儀器指針以及二維和三維圖形如圖1和圖2所示,這些圖形完全能夠滿足本軟件數值計算結果的圖形處理需求。
圖1 利用Qwt庫繪制出的收音機調節
按鈕、表盤、指南針等儀器指針
圖2 利用Qwt庫繪制出的二維及三維圖
2 脈沖束輻照材料響應數值模擬軟件GUI設計
2.1 軟件跨平臺設計
為滿足不同用戶操作系統的要求,同時為加快開發速度、縮短開發周期、減少重復勞動,使得相同的程序代碼能夠在不同操作系統下編譯,脈沖束輻照材料響應軟件的開發需進行跨平臺設計。計算核心代碼采用標準Fortran 90語言編寫,可以滿足跨平臺需求。程序代碼采用C++語言編寫,軟件菜單、參數輸入界面與后處理圖形輸出需要調用大量類庫才能實現,采用跨平臺C++類庫Qt是一種非常合適的選擇,基于Qt的圖形庫Qwt則為軟件后處理圖形輸出提供了強有力的支持。
通過跨平臺C++類庫Qt和基于Qt的圖形庫Qwt設計的軟件前后處理GUI,結合Fortran 90編寫的求解器核心代碼,可以輕松實現“一次編寫,隨處編譯”的軟件跨平臺設計理念,從而使得軟件能夠在不同操作系統下編譯生成相應的版本,實現軟件的跨平臺運行。
2.2 GUI總體框架設計
脈沖束輻照材料響應軟件的求解器包括多種求解程序,軟件GUI設計需要把這些獨立的求解程序納入到一個綜合GUI下。為了使GUI適合多種求解核心,該GUI采用分層設計,把通用菜單放到最外層,后級菜單逐步根據不同的求解核心細化,最終具體到適合各種求解核心的參數輸入GUI。這種設計吸取了多種商業軟件GUI的優點,方便了用戶使用,同時還具有易學、清晰、簡潔、通用性強等特點,可擴展為多種求解核心的前后處理GUI。
2.2.1 主界面
根據用戶需求,將主界面劃分為動態菜單區、靜態菜單區、圖形顯示區、對話區和狀態區五個主要部分。動態菜單區根據用戶選擇可動態產生下級菜單。靜態菜單區為固定的若干控制按鈕,主要控制圖形的顯示方式。圖形顯示區用在后處理中,根據計算結果顯示相應的圖形。對話區顯示程序提示、警告信息和相關信息,用戶還可在此輸入數據或命令。狀態區顯示了當前正在執行的操作或狀態,如前處理輸入數據階段、求解器計算階段或后處理繪圖階段等。
2.2.2 材料屬性輸入對話框
由于數值計算關系到若干材料,因此設計了材料屬性參數設置對話框,如圖3所示。
圖3 材料屬性參數設置對話框
它分為控制按鈕區、狀態方程類型選擇區、參數輸入區和元素百分含量顯示區等幾個主要部分??刂瓢粹o區包含若干功能按鈕,元素百分含量顯示區包括組成該材料的各個元素的元素序號、符號和百分含量值。新建和修改材料時,元素百分含量顯示區左側的“元素選擇”按鈕可用,點擊后彈出如圖4所示的元素選擇對話框。該對話框的上半部分為元素周期表,點擊元素所在的相應區域就會彈出對話框,提示用戶輸入當前元素的百分含量,輸入完成后,此元素及其百分含量值就會出現在元素含量列表區,同時動態地計算總的百分含量值。
2.3 GUI的中文化
Qt包含有很多工具和函數,它們使程序國際化工作即語言翻譯、字符編碼、輸入技術和顯示轉換等變得簡單。利用Qt軟件的國際化功能,該軟件具備中、英文兩種顯示界面。主要實現步驟如下:
首先使用QString處理所有用戶可見文本并接受tr()的檢查,因為QString內部使用Unicode編碼,所以QString能夠處理世界上的所有語言;再運行lupdate從應用程序的源代碼中提取所有的用戶可視字符串;接下來使用Qt Linguist翻譯應用程序;再運行lrelease生成二進制的.qm文件;最后在應用程序開始時使用Qtranslator加載這個翻譯文件。這樣,當程序運行時,就顯示了翻譯后的文字[4]。
圖4 元素選擇對話框
2.4 數據文件的輸入與輸出
本軟件的一個要求就是由界面輸入參數,并按照求解器輸入文件格式要求生成一個數據文件,供求解器計算調用。其中需要用到文件的讀、寫技術。寫文件,即把用戶輸入到界面中的參數數據按要求存入文件中;讀文件,即從磁盤上的文件中讀數據,并顯示到指定控件中。
讀文件時,先打開文件,通常以IO_ReadOnly“只讀”方式打開文件,再定義一個QtextStream類的stream對象,然后調用read()函數從文件中讀數據,最后將取得的數據賦給相應的控件進行顯示,如:
lineEdit1->setText(stream.read());
為將文件中的所有數據賦給編輯框1。
寫文件時,通常以file.open(IO_WriteOnly)“寫”方式打開文件。該方式會將文件中原來所有的數據覆蓋,若不想刪除原有數據,而是在文件中增加數據,則還需使用IO_Append方式打開文件,即file.open(IO_WriteOnly|IO_Append)。之后定義一個QtextStream類的stream對象,再向stream中寫入數據,如:
stream <
即為將編輯框1中的數據寫入文件。
執行“提交運算”命令后產生的指定格式的數據文件如圖5所示,求解器根據此文件即可進行運算。
2.5 圖形繪制功能
軟件后處理要求根據用戶需求在計算過程中或計算結束后輸出所關注的物理量的相應圖形,以迅速、直觀地查看計算結果,必要時給出動畫顯示。通過調用Qwt庫,可實現畫圖功能并嵌入到軟件前后處理GUI中,從而完成計算結果的后處理圖形顯示。根據計算結果畫出的曲線圖和光譜圖如圖6,圖7所示。
圖5 由本輸入界面產生的數據文件
圖6 曲線圖
圖7 光譜圖
3 結 語
Qt是一個通用的跨平臺C++類庫,為跨平臺軟件的開發提供了極佳的工作平臺?;赒t的開源圖形庫Qwt為軟件后處理提供了極大便利。Qt在脈沖束輻照材料熱力學效應軟件GUI開發中的應用表明:Qt在數值計算軟件開發中具有很強的優勢,加快了開發速度;縮短了開發周期;減少了重復勞動。其程序代碼無需修改或做較少改動便能夠在不同的操作系統下順利編譯,非常適合作為數值計算軟件GUI開發的工作平臺。
參考文獻
[1]祁獻鵬.基于嵌入式Qt的中文GUI平臺的設計[D].鄭州:解放軍信息工程大學,2002.
[2]李銘.三維數據場可視化平臺及其關鍵技術研究[D].哈爾濱:哈爾濱工程大學,2005.
[3]聶愛菁,王心豐,崔賽華.在Linux下用Qt開發新一代DTS圖形數據系統的分析與設計[J].國外電子元器件,2004(5):12-15.
[4]王愛文.Linux平臺下基于Qt的電子海圖的研究與實現[D].哈爾濱:哈爾濱工程大學,2004.
[5]張方輝,王建群.Qt/Embedded在嵌入式Linux上的移植[J].計算機技術與發展,2006,16(7):64-66.
[6]許德新,談振藩,高延濱.基于Qt組件庫應用程序的生成及其跨平臺實現[J].東北農業大學學報,2006,37(3):373-376.
[7]鄧飛.基于Qt的地震資料采集質量監控及評價系統的開發與研究[D].成都:成都理工大學,2004.
[8]宋智寧,姚維.基于Qte通信機制的GUI系統[J].機電工程,2007,24(3):77-80.
[9]楊少鵬.SXD/Linux通信編碼仿真平臺的設計與實現[D].成都:西南交通大學,2005.
[10]\\布蘭切尼.C++ GUI Qt 3編程[M].齊亮,譯.北京:北京航空航天大學出版社,2006.
[11]于曉,王家禮,宋營坤,等. 基于Qt/Embedded的微波信號發生器軟件設計\\.現代電子技術,2007,30(13):1-3.
作者簡介
袁 媛 女,1979年出生,河南鄭州人,工程師。主要研究方向為軟件開發和虛擬仿真。
王延紅 女,1972年出生,河南淮陽人,碩士研究生,工程師。主要研究方向為軟件開發和科學計算可視化。
江 凌 女,1981年出生,安徽桐城人,碩士研究生,助理工程師。主要研究方向為軟件開發和數據庫開發。
蔣 陽 男,1982年出生,湖北武漢人,助理工程師。主要研究方向為軟件開發和計算機網絡技術。