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

使用Qt庫開發(fā)地震數(shù)據(jù)處理系統(tǒng)的分析與設(shè)計*

2011-11-14 11:41:10孫一帆郭唐永
大地測量與地球動力學(xué) 2011年6期
關(guān)鍵詞:跨平臺數(shù)據(jù)庫信號

孫一帆 郭唐永 鄒 彤 朱 威

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

使用Qt庫開發(fā)地震數(shù)據(jù)處理系統(tǒng)的分析與設(shè)計*

孫一帆 郭唐永 鄒 彤 朱 威

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

提出一種運用Qt開發(fā)庫和三方庫Qwt對地震數(shù)據(jù)處理系統(tǒng)進行設(shè)計完善的方案,此方案基于面向?qū)ο笏枷耄幊毯啽恪⑷菀拙S護、硬件兼容性好、可移植性強。

Qt;Qwt;信號和槽;面向?qū)ο?數(shù)據(jù)處理

1 引言

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

2 相關(guān)技術(shù)分析

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

2.1 signal/slot機制

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

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

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

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

2.2 model/view結(jié)構(gòu)

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

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

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

圖2 模型/視圖結(jié)構(gòu)Fig 2 Model/view architecture

2.3 Qwt

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

3 地震數(shù)據(jù)處理系統(tǒng)概述

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

3.1 體系結(jié)構(gòu)設(shè)計

選擇合適的體系結(jié)構(gòu),對于軟件開發(fā)者而言是最重要的事項。良好的體系結(jié)構(gòu)可以降低軟件系統(tǒng)的復(fù)雜性,各個模塊更能夠符合“低耦合高內(nèi)聚”的要求,使系統(tǒng)具備良好的可重用性。

圖3 地震數(shù)據(jù)處理系統(tǒng)總體結(jié)構(gòu)Fig 3 Overall structure of seisemetic data process system

用戶主控制界面。為系統(tǒng)提供統(tǒng)一風(fēng)格的窗體結(jié)構(gòu),要求界面直觀清楚,操作方便,具有商業(yè)軟件界面特征。使用Qt的可視化編程方式設(shè)計出界面(.UI文件),利用signal/slot將界面各控件與后臺任務(wù)邏輯關(guān)聯(lián)起來。

3.2 地震數(shù)據(jù)圖形化顯示模塊

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

下面是曲線類的關(guān)鍵代碼:

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

3.3 數(shù)據(jù)管理模塊

數(shù)據(jù)訪問接口的實現(xiàn)主要依賴于兩個核心的類,一個是自定義DatabaseCFG類,一個是Qt提供的QSqlDatabase類。

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

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

QSqlDatabase主要實現(xiàn)對數(shù)據(jù)庫的操作。系統(tǒng)采用數(shù)據(jù)庫方式管理地震資料,該模塊提供地震數(shù)據(jù)庫的查詢、修改,并可將查詢結(jié)果以圖形方式顯示。數(shù)據(jù)庫連接操作由Qt的QSqlDatabase類提供。

建立數(shù)據(jù)庫連接的代碼如下:

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

QSqlQueryModel model;

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

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

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

4 結(jié)束語

本文所提出的地震數(shù)據(jù)處理系統(tǒng)為高速鐵路地震預(yù)警系統(tǒng)的穩(wěn)定性及可擴展性提供了一定的保障。Qt工具庫面向?qū)ο筇匦院涂梢暬幊碳夹g(shù)的充分結(jié)合利用使系統(tǒng)具備了擴充性和可靠性。代碼也很容易跨平臺移植,以適應(yīng)用戶的特殊要求。同時,開源的第三方庫Qwt的應(yīng)用,則可幫助我們利用他人已有的成果進一步降低開發(fā)難度,提高開發(fā)效率。另外由于該系統(tǒng)采用數(shù)據(jù)庫方式處理地震資料,也大大減少了原有系統(tǒng)數(shù)據(jù)維護的工作量及繁雜度。

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

2 萬長勝,等.用Q t進行面向?qū)ο筌浖脑O(shè)計與開發(fā)[J].核電子學(xué)與探測技術(shù),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].北京:電子工業(yè)出版社,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年生,碩士,研究方向:程序設(shè)計,面向?qū)ο箝_發(fā).E-mail:cybersyf@qq.com

TH76.3

A

猜你喜歡
跨平臺數(shù)據(jù)庫信號
信號
鴨綠江(2021年35期)2021-04-19 12:24:18
完形填空二則
跨平臺APEX接口組件的設(shè)計與實現(xiàn)
基于FPGA的多功能信號發(fā)生器的設(shè)計
電子制作(2018年11期)2018-08-04 03:25:42
數(shù)據(jù)庫
財經(jīng)(2017年2期)2017-03-10 14:35:35
數(shù)據(jù)庫
財經(jīng)(2016年15期)2016-06-03 07:38:02
數(shù)據(jù)庫
財經(jīng)(2016年3期)2016-03-07 07:44:46
基于LabVIEW的力加載信號采集與PID控制
數(shù)據(jù)庫
財經(jīng)(2016年6期)2016-02-24 07:41:51
基于QT的跨平臺輸電鐵塔監(jiān)控終端軟件設(shè)計與實現(xiàn)
主站蜘蛛池模板: 试看120秒男女啪啪免费| 欧美日韩精品在线播放| 国产人妖视频一区在线观看| 亚洲精品卡2卡3卡4卡5卡区| 网友自拍视频精品区| 毛片在线播放a| 日韩中文无码av超清| 无码人妻免费| 久久久久国产一级毛片高清板| 久久人搡人人玩人妻精品| 亚洲综合第一区| 亚洲综合18p| 日本精品视频一区二区| 亚洲h视频在线| 欧美成人日韩| 久久免费看片| 99性视频| 国产又大又粗又猛又爽的视频| 国产精品男人的天堂| 亚洲视频四区| 毛片免费在线| 91综合色区亚洲熟妇p| 热99精品视频| 亚洲av无码人妻| 成人在线不卡| 97视频精品全国在线观看| 成年人视频一区二区| 最新无码专区超级碰碰碰| 欧美一区二区三区不卡免费| 日韩无码精品人妻| 亚洲永久免费网站| 色成人综合| 巨熟乳波霸若妻中文观看免费| 亚洲天堂久久| 国产精品福利社| 片在线无码观看| 九色视频线上播放| 高清欧美性猛交XXXX黑人猛交| 欧美色香蕉| 狠狠色狠狠色综合久久第一次| 四虎影视库国产精品一区| 国产午夜看片| 日韩欧美中文在线| 久久永久精品免费视频| 国产剧情国内精品原创| 日韩在线1| 91亚瑟视频| 国产一级片网址| 成人免费午间影院在线观看| 欧洲极品无码一区二区三区| 色视频久久| 先锋资源久久| 亚洲av无码久久无遮挡| 国产午夜无码片在线观看网站| 福利一区三区| 欧美成a人片在线观看| 114级毛片免费观看| 久久6免费视频| 99久视频| 国产精选自拍| 亚洲美女一区二区三区| 色婷婷视频在线| 欧美中文字幕在线二区| 熟妇丰满人妻av无码区| 国产精品美女自慰喷水| 国产综合精品一区二区| 波多野结衣AV无码久久一区| 色婷婷色丁香| 亚洲一区二区日韩欧美gif| 国产美女无遮挡免费视频网站| 欧美精品导航| 四虎成人精品| 亚洲一道AV无码午夜福利| 在线观看精品国产入口| 国产成人综合在线观看| 精品欧美视频| 国产黄色爱视频| 日韩精品久久无码中文字幕色欲| 国产精品香蕉在线| 老司国产精品视频| 91色在线视频| 国产女人在线视频|