999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

使用Qt庫開發地震數據處理系統的分析與設計*

2011-11-14 11:41:10孫一帆郭唐永
大地測量與地球動力學 2011年6期
關鍵詞:跨平臺數據庫信號

孫一帆 郭唐永 鄒 彤 朱 威

(中國地震局地震研究所,武漢 430071)

使用Qt庫開發地震數據處理系統的分析與設計*

孫一帆 郭唐永 鄒 彤 朱 威

(中國地震局地震研究所,武漢 430071)

提出一種運用Qt開發庫和三方庫Qwt對地震數據處理系統進行設計完善的方案,此方案基于面向對象思想,編程簡便、容易維護、硬件兼容性好、可移植性強。

Qt;Qwt;信號和槽;面向對象;數據處理

1 引言

高速鐵路地震預警系統在高速鐵路軌道沿線的多個地震監測點布設傳感器,連續不斷地采集、監測地震動。一旦檢測到發生的地震有可能危及列車運行安全時,進行應急處置,降低地震造成的損害。地震數據處理系統是作為高速鐵路地震預警系統的一個子系統,為鐵路管理人員和地震工程人員提供高效的數據處理解決方案。系統包括用戶界面、數據圖形化顯示、數據管理等多個子系統。各種地震數據處理軟件均配備了完善的用戶交互子系統的主框架設計。因為整個系統實時性、運行穩定性,以及跨平臺和可擴展性的要求,所以采用基于C++語言的Qt開發庫來設計地震數據處理系統,實現地震數據的可視化管理。

2 相關技術分析

作為TrollTech公司的標志產品,Qt是一個跨平臺的C++GUI(圖形用戶界面)應用構架,它提供了豐富的窗口部件集,具有面向對象、易于擴展、跨平臺等特點,目前Linux上最為流行的KDE桌面環境以及虛擬地球儀軟件GoogleEarth就是建立在 Qt庫的基礎上。Qt支持幾乎所有主流操作系統:MSWindows、UNIX/X11-Linux、Sun Solaris、HP-UX、Digital Unix、IBM AIX、SGI IRIX;QtEmbedded則支持采用framebuffer接口 的 Linux平臺。良好的可移植性使得Qt成為跨平臺上進行軟件開發時的GUI首選。

2.1 signal/slot機制

要了解Qt就必須首先認識signal/slot(信號和槽)機制。信號和槽是一種高級接口,應用于對象之間的通信,它是Qt的核心特性,也是Qt區別于其他開發庫的重要地方。信號和槽是Qt自行定義的一種通信機制,它獨立于標準的C/C++語言,因此要正確的處理信號和槽,必須借助一個稱為moc (Meta Object Compiler)的工具,該工具是一個 C+ +預處理程序,它為把含有Qt特有語法的代碼自動轉化生成標準C++語言代碼,供C++編譯器下一步處理[1]。在我們所熟知的許多其他 GUI開發包中,窗口部件(widget)都有一個回調函數用于響應它們所觸發的每個動作,這個回調函數通常是一個指向某個函數的指針。但是,在Qt中信號和槽取代了這些凌亂的函數指針,使得編寫這些窗口部件響應程序更為簡潔明了。信號和槽能攜帶任意數量和任意類型的參數,其類型完全安全,不會像回調函數那樣產生運行錯誤。

信號是一個特定的標識,而槽就是一個函數,槽函數既可與信號關聯,也能夠像普通函數一樣被調用,如圖1所示,當Object1對象的某個特定事件發生時,通過發送信號,將與之相關聯的Object2對象的槽函數激活,即執行槽函數的代碼,在程序中使用QObject::connect()將某個信號和某個槽進行關聯。

圖1 信號和槽機制Fig 1 Signal and slot mechanism

所有從QObject或其子類(如Qwidget)派生的類都能夠包含信號和槽。當對象改變其狀態時,信號就由該對象發射(emit)出去,它不關心另一端是誰在接收這個信號。一個槽也并不關心是否有信號與自己相連接。signal/slot實現了高度的信息封裝,它確保對象被當作一個真正的軟件組件來使用[2]。signal/slot降低了Qt對象的耦合度,即使關聯的對象在運行時被刪除,應用程序也不會崩潰,因此設計出來的組件可重用性較高。signal/slot完全獨立于任何事件循環。

2.2 model/view結構

Qt包含大量item view類,它們使用model/view (模型/視圖)結構來管理數據與表示層的關系。該結構與經典的MVC設計模式基于同樣的思想,即將數據存儲與數據表示進行分離[3]。這種功能上的分離給了開發人員更大的彈性來定制數據項的表示,它也提供一個標準的model接口,使得更多的數據源可以被這些item view類使用。

如圖2所示,model與數據源通訊,并提供接口供其他組件使用。通訊的性質依賴于數據源的種類與model實現的方式。view從model獲取model indexes,后者是數據項的引用。通過把model indexes提供給model,view可以從數據源中獲取數據。

在標準的views中,delegate會對數據項進行渲染,當某個數據項被選中時,delegate通過model indexes與model直接進行交流。總的來說,model/ view相關類可以被分成上面所提到的3組:models,views,delegates。這些組件通過抽象類來定義,它們提供了共同的接口,在某些情況下,還提供了缺省的實現。抽象類意味著需要子類化以提供完整的其他組件希望的功能,同時也允許實現定制的組件。models、views、delegates之間通過signal/slot機制來進行通訊:從model發出的信號通知view數據源中的數據發生了改變;從view發出的信號提供了有關被顯示的數據項與用戶交互的信息;從delegate發生的信號被用于在編輯時通知model和view關于當前編輯器的狀態信息。

圖2 模型/視圖結構Fig 2 Model/view architecture

2.3 Qwt

Qwt(Qt Widgets for Technical Applications)是一個基于LGPL版權協議的開源項目,可為科學數據生成各種統計圖。它為具有技術專業背景的程序提供GUI組件和一組實用類,其目標是以基于2D方式的窗體部件來顯示數據,數據源以數值、數組或浮點數組等方式提供,輸出方式可以是 Curves(曲線),Slider(滾動條),Dials(圓盤),Compasses(儀表盤)等[4]。該工具庫基于Qt開發,所以也繼承了Qt的跨平臺特性。

3 地震數據處理系統概述

地震數據處理主系統是一種綜合性數據業務系統,包括用戶界面、數據圖形化顯示、數據管理等多個子系統。隨著數據處理解釋一體化系統的發展,系統應該具有統一的數據管理平臺、統一的顯示界面和統一的作業平臺。而利用Qt庫強大的GUI設計統一的用戶界面正是為處理系統的系統管理功能和處理應用功能提供了一種可視化的手段,其中實現了用戶管理、項目管理、數據管理和流程管理的“高內聚”主控功能;而通過Qt的信號和槽機制來調用獨立的功能模塊,使系統各個模塊之間又具“低耦合”的特點,最大程度地提高系統的效率[5]。

3.1 體系結構設計

選擇合適的體系結構,對于軟件開發者而言是最重要的事項。良好的體系結構可以降低軟件系統的復雜性,各個模塊更能夠符合“低耦合高內聚”的要求,使系統具備良好的可重用性。

圖3 地震數據處理系統總體結構Fig 3 Overall structure of seisemetic data process system

用戶主控制界面。為系統提供統一風格的窗體結構,要求界面直觀清楚,操作方便,具有商業軟件界面特征。使用Qt的可視化編程方式設計出界面(.UI文件),利用signal/slot將界面各控件與后臺任務邏輯關聯起來。

3.2 地震數據圖形化顯示模塊

提供實時監控功能。傳感器獲得的地震信息通過A/D轉換,由I/O接口傳送給主機,顯示模塊把這些數據通過圖形化表示實時顯示給用戶,并可提供傳感器實時運行的狀態信息。圖形化顯示模塊主要是利用Qwt工具庫構建的,使用Qwt提供的Qwt-PlotCurve類完成地震波形曲線的繪制。

下面是曲線類的關鍵代碼:

replot();//每經過一定的時間間隔圖形坐標發生平移,圖像需要重繪,時間間隔由*QTimerEvent類型的參數決定,此處使用默認值1 000毫秒刷新一次

3.3 數據管理模塊

數據訪問接口的實現主要依賴于兩個核心的類,一個是自定義DatabaseCFG類,一個是Qt提供的QSqlDatabase類。

DatabaseCFG類的主要的功能就是根據指定的數據庫配置文件,得到數據庫對象。它的使用示例代碼如下:

以上示例代碼完成了對地震資料數據庫的連接,并得到該數據庫對象,SqliteConfig.ini為連接開源SQLITE數據庫的配置文件。為了實現接口可以連接幾種數據庫,且又不需要修改源程序,我們定義一個數據庫連接配置文件,文件格式如下:

QSqlDatabase主要實現對數據庫的操作。系統采用數據庫方式管理地震資料,該模塊提供地震數據庫的查詢、修改,并可將查詢結果以圖形方式顯示。數據庫連接操作由Qt的QSqlDatabase類提供。

建立數據庫連接的代碼如下:

一旦連接建立,就可以通過QSqlQueryModel類對數據庫進行查詢操作,QSqlQueryModel類提供了一個只讀的數據模型用來表示SQL操作的結果,如下:

QSqlQueryModel model;

model.setQuery(quot;SELECT* FROM EarthquakeDataquot;)

查詢提交后就可以使用model的record(i)成員函數訪問第i條結果了。

QSqlQueryModel和QSqlTableModel提供從數據庫數據到用于數據表示的窗體的映射,這些類均以QT的model/view結構設計,實現地震資料數據庫查詢結果的顯示輸出。數據庫管理模塊采用3層架構方式來將用戶界面、業務邏輯、數據訪問分離開來,而它們彼此間則通過接口交互。在這種架構下,用戶通過中間層來訪問和修改數據庫,這樣有利于保持數據的一致性和正確性。由于用戶不直接訪問數據庫,數據庫結構的改變不會引起用戶服務程序的修改,而只需修改中間層。

4 結束語

本文所提出的地震數據處理系統為高速鐵路地震預警系統的穩定性及可擴展性提供了一定的保障。Qt工具庫面向對象特性和可視化編程技術的充分結合利用使系統具備了擴充性和可靠性。代碼也很容易跨平臺移植,以適應用戶的特殊要求。同時,開源的第三方庫Qwt的應用,則可幫助我們利用他人已有的成果進一步降低開發難度,提高開發效率。另外由于該系統采用數據庫方式處理地震資料,也大大減少了原有系統數據維護的工作量及繁雜度。

1 Jasmin Blanchette&Mark Summerfield.C++GUI Programming with Qt4 2nd Edition[S].2008.

2 萬長勝,等.用Q t進行面向對象軟件的設計與開發[J].核電子學與探測技術,2004,24:311.

3 Qt Reference Documentation http[DB/OL].http://doc.trolltech.com/4.6/index.html.

4 Qwt User’s Guide 6.0.0[DB/OL].http://qwt.sourceforge.net/classes.html.

5 蔡志明.精通 Qt4編程[M].北京:電子工業出版社,2008.

DEVELOPING SEISMIC DATA PROCESSING SYSTEM USING Qt LIBRARY

Sun Yifan,Guo Tangyong,Zou Tong and Zhu Wei
(Institute of Seismology,CEA,Wuhan 430071)

Seismic data processing system is an important part of earthquake early warning system for highspeed railway.This paper presents the use of Qt development libraries and Qwt library in the design of seismic data processing system.This design is based on object-oriented thinking,easier to program and convenient for maintaining and has better hardware compatibility and portability.

Qt;Qwt;signal/slot;object-oriented;data processing

1671-5942(2011)Supp.-0138-04

2011-02-25

孫一帆,男,1984年生,碩士,研究方向:程序設計,面向對象開發.E-mail:cybersyf@qq.com

TH76.3

A

猜你喜歡
跨平臺數據庫信號
信號
鴨綠江(2021年35期)2021-04-19 12:24:18
完形填空二則
跨平臺APEX接口組件的設計與實現
測控技術(2018年9期)2018-11-25 07:44:58
基于FPGA的多功能信號發生器的設計
電子制作(2018年11期)2018-08-04 03:25:42
數據庫
財經(2017年2期)2017-03-10 14:35:35
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
基于LabVIEW的力加載信號采集與PID控制
數據庫
財經(2016年6期)2016-02-24 07:41:51
基于QT的跨平臺輸電鐵塔監控終端軟件設計與實現
主站蜘蛛池模板: 成年片色大黄全免费网站久久| 国产青青草视频| 凹凸国产熟女精品视频| 国产青青操| 日本一区二区不卡视频| аⅴ资源中文在线天堂| 久久九九热视频| 99久久免费精品特色大片| 91精品综合| 美女内射视频WWW网站午夜 | 一级一级特黄女人精品毛片| 性视频久久| 中文成人在线视频| 国产小视频在线高清播放| 久久久久国产一级毛片高清板| 色婷婷亚洲综合五月| 日本国产在线| 欧美成人综合在线| 伊人91在线| 国产一线在线| 日韩麻豆小视频| 日韩无码黄色网站| 91成人精品视频| 免费网站成人亚洲| a毛片免费看| 99这里只有精品6| 亚洲国产成人久久77| 欧美天堂久久| 2019年国产精品自拍不卡| 极品性荡少妇一区二区色欲| 亚洲成人手机在线| 午夜精品国产自在| 亚洲综合色婷婷| 日韩在线观看网站| 欧美高清日韩| 国产精品中文免费福利| 久久五月视频| 999精品在线视频| 国产97视频在线| 午夜福利在线观看入口| 亚洲最大综合网| 国产黄在线免费观看| 久久久久88色偷偷| 日本三区视频| 国产第一页屁屁影院| 精品福利网| 国产精品无码制服丝袜| 漂亮人妻被中出中文字幕久久| 亚洲第一极品精品无码| 不卡午夜视频| 日韩精品欧美国产在线| 全免费a级毛片免费看不卡| 强乱中文字幕在线播放不卡| 麻豆精品在线播放| 国产在线精品99一区不卡| 福利一区三区| 日韩无码视频播放| 欧美成人综合视频| 国产手机在线小视频免费观看| 久久99久久无码毛片一区二区| 国产欧美日韩视频一区二区三区| 久久国产精品娇妻素人| 99re免费视频| 亚瑟天堂久久一区二区影院| 欧美另类精品一区二区三区| 亚洲另类国产欧美一区二区| 国产成人高清精品免费软件| 日本一本在线视频| 怡红院美国分院一区二区| 国产精品黄色片| 尤物成AV人片在线观看| 亚洲精品第五页| 国产日本欧美亚洲精品视| 亚洲国内精品自在自线官| 欧美有码在线| 亚洲女同一区二区| 人妻免费无码不卡视频| 国产精品第一区在线观看| 高清欧美性猛交XXXX黑人猛交| 亚洲—日韩aV在线| 国产鲁鲁视频在线观看| 日韩毛片在线播放|