国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Qt中基于QCustomPlot實(shí)現(xiàn)曲線繪制和顯示的研究

2019-11-19 12:13徐瑤
科技視界 2019年25期

徐瑤

【摘 要】為了更加直觀有效的繪制和顯示雷達(dá)產(chǎn)生的大量數(shù)據(jù),本文提出了一種Qt平臺(tái)下基于QCustomPlot實(shí)現(xiàn)曲線繪制和顯示的方法,該方法可以簡(jiǎn)單方便的定制曲線窗和曲線的外觀,有效簡(jiǎn)化了曲線繪制的流程,降低了開發(fā)過(guò)程中功能實(shí)現(xiàn)的難度。通過(guò)在某型雷達(dá)顯控軟件中使用該方法繪制和顯示雷達(dá)校正樣本數(shù)據(jù),驗(yàn)證了該方法的有效性。

【關(guān)鍵詞】QCustomPlot;Qt平臺(tái);校正樣本數(shù)據(jù)

中圖分類號(hào): TP368.1文獻(xiàn)標(biāo)識(shí)碼: A文章編號(hào): 2095-2457(2019)25-0054-002

DOI:10.19694/j.cnki.issn2095-2457.2019.25.025

0 引言

隨著雷達(dá)技術(shù)的不斷發(fā)展,最終送至雷達(dá)顯控軟件界面上顯示的信息也越來(lái)越多,以校正樣本數(shù)據(jù)為例,視校正通道的數(shù)量不同,可能需要同時(shí)顯示幾十至上百個(gè)通道的數(shù)據(jù),每個(gè)通道又包含幾十至上百個(gè)采樣點(diǎn)。如此巨大數(shù)量的數(shù)據(jù)如果采用常規(guī)的列表顯示,不但列表數(shù)據(jù)龐大,而且使用起來(lái)效率低下,對(duì)操作人員非常不友好。因此,我們需要使用二維圖表來(lái)直觀形象的顯示這些數(shù)據(jù)[1]。

雷達(dá)顯控軟件為了繪制曲線信息,采用了多種第三方庫(kù)和插件,較為常用的有TeeChart[2]、qwt[3-4]等,其中TeeChart繪制圖形表現(xiàn)形式豐富,但因其是商業(yè)軟件,會(huì)給部分開發(fā)者帶來(lái)較大的經(jīng)濟(jì)負(fù)擔(dān);qwt具有跨平臺(tái)的屬性,代碼開源,但表現(xiàn)形式略顯不足,不能滿足細(xì)節(jié)需要精細(xì)顯示的項(xiàng)目需要。

為實(shí)現(xiàn)復(fù)雜曲線繪制和顯示,本文提出一種在Qt中基于QCustomPlot來(lái)實(shí)現(xiàn)的方法。使用該方法可以同時(shí)顯示多個(gè)曲線窗,改善了之前使用傳統(tǒng)方法處理只能顯示一個(gè)曲線窗的狀況。并在每個(gè)曲線窗中繪制多條二維曲線,方便進(jìn)行多條曲線之間的比較。操作人員還可以隨意獲取每條曲線的信息,有利于快速定位問(wèn)題。該方法容易上手、使用簡(jiǎn)便,并且可以跨平臺(tái)使用,不但可以解決前文中提到的問(wèn)題,還可以給軟件操作人員提供更好的數(shù)據(jù)顯示效果。

1 相關(guān)技術(shù)

QCustomPlot是在Qt框架下實(shí)現(xiàn)的基于LGPL版權(quán)協(xié)議的開源項(xiàng)目,它無(wú)需進(jìn)一步的庫(kù)依賴,文檔豐富且使用方便,主要完成二維曲線的繪圖和數(shù)據(jù)可視化,如曲線圖、趨勢(shì)圖、坐標(biāo)圖、柱狀圖等。

(1)將幫助文檔qcustomplot.qch復(fù)制到Qt目錄下,打開Qt,工具->選項(xiàng)->幫助->添加,選擇qcustomplot.qch,安裝幫助文檔。

(2)將qcustomplot.h文件和qcustomplot.cpp文件復(fù)制到工程文件里,并在項(xiàng)目里添加這兩個(gè)文件。

(3)在.pro文件中加入語(yǔ)句 QT+=printsupport。

此時(shí)就可以將項(xiàng)目中的QWidget控件提升為QCustomPlot控件使用了。

2 復(fù)雜曲線繪制及顯示的實(shí)現(xiàn)

2.1 曲線窗模塊數(shù)據(jù)處理流程

仍以雷達(dá)顯控軟件中顯示校正樣本數(shù)據(jù)的曲線窗為例,基于QCustomPlot的曲線窗顯示和繪制模塊主要包括四個(gè)部分,即數(shù)據(jù)接收模塊、數(shù)據(jù)管理模塊、人機(jī)交互模塊和顯示繪制模塊.數(shù)據(jù)接收模塊接收經(jīng)由網(wǎng)絡(luò)發(fā)來(lái)的校正樣本數(shù)據(jù),數(shù)據(jù)管理模塊負(fù)責(zé)對(duì)校正樣本數(shù)據(jù)的解析、保存及管理,人機(jī)交互模塊負(fù)責(zé)實(shí)現(xiàn)曲線窗的人機(jī)交互功能,顯示繪制模塊負(fù)責(zé)使用QCustomPlot控件來(lái)繪制校正樣本數(shù)據(jù),并將其顯示出來(lái)。

2.2 曲線窗主窗體設(shè)計(jì)

曲線窗主窗體包含多個(gè)子窗體,均為由QWidget控件提升而成QCustomPlot控件,分別用來(lái)顯示校正前和校正后的樣本數(shù)據(jù),每個(gè)子窗體中同時(shí)顯示所有通道的樣本數(shù)據(jù),每個(gè)通道顯示為一條二維曲線。

2.3 子窗體數(shù)據(jù)管理設(shè)計(jì)

在每個(gè)子窗體中需要繪制多條二維曲線,每條對(duì)應(yīng)一個(gè)通道的樣本數(shù)據(jù)。對(duì)于由數(shù)據(jù)接收模塊接收到的校正樣本數(shù)據(jù),程序首先識(shí)別不同的校正樣本數(shù)據(jù)類型,根據(jù)校正樣本數(shù)據(jù)類型判斷出通道數(shù)和每個(gè)通道的樣本數(shù)。由于數(shù)據(jù)包中的校正樣本數(shù)據(jù)是一維線性排列的,需要根據(jù)通道數(shù)和樣本數(shù)解析出每條二維曲線的數(shù)據(jù),送給顯示繪制模塊的同時(shí)還作為二維數(shù)組保存至本地。

2.4 子窗體的繪制顯示設(shè)計(jì)

2.4.1 設(shè)置子窗體和曲線顯示的外觀

設(shè)置子窗體外觀的代碼如下:

QCustomPlot * m_CurvePlot;

m_CurvePlot->plot->xAxis->setBasePen(QPen(QColo(239,239,239)));//設(shè)置橫軸的顏色

m_CurvePlot->plot->xAxis->setTickPen(QPen(QColor(239,239,239)));//設(shè)置橫軸主刻度的顏色

m_CurvePlot->plot->xAxis->setTickLabelFont(QFont("宋體",9));//設(shè)置橫軸刻度標(biāo)記的字體

m_CurvePlot->plot->xAxis->setTickLabelColor(QColor(239,239,239));//設(shè)置橫軸刻度標(biāo)記的顏色

m_CurvePlot->plot->yAxis->setBasePen(QPen(QColor(239,239,239)));//設(shè)置縱軸的顏色

m_CurvePlot->plot->yAxis->setTickPen(QPen(QColor(239,239,239)));//設(shè)置縱軸主刻度的顏色

m_CurvePlot->plot->yAxis->setTickLabelFont(QFont("宋體",9));//設(shè)置縱軸刻度標(biāo)記的字體

m_CurvePlot->plot->yAxis->setTickLabelColor(QColor(239,239,239));//設(shè)置縱軸刻度標(biāo)記的顏色

m_CurvePlot->plot->setBackground(QBrush(Qt::NoBrush));//設(shè)置窗體背景的畫刷

設(shè)置子窗體中曲線的顯示樣式的代碼如下:

m_CurvePlot->plot->legend->setVisible(false);//設(shè)置圖例說(shuō)明是否可見

m_CurvePlot->plot->graphs[i]->setLineStyle(QCPGraph::IsLine);//設(shè)置線條的樣式

m_CurvePlot->plot->graphs[i]->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle,6));//設(shè)置點(diǎn)的樣式

2.4.2 數(shù)據(jù)更新

首先調(diào)用函數(shù)setData(const QVector&key, const QVector&value)更新曲線數(shù)據(jù),再調(diào)用函數(shù)replot()重繪當(dāng)前子窗體中顯示的曲線。

2.4.3 數(shù)據(jù)刪除

調(diào)用函數(shù)removeGraph(graphs[i])刪除給定序號(hào)的曲線,再調(diào)用函數(shù)replot()重繪刪除某些曲線后子窗體的顯示。

2.5 子窗體的人機(jī)交互設(shè)計(jì)

由于校正樣本數(shù)據(jù)通道數(shù)較多,所以本例中設(shè)置不顯示圖例,并使用setColor函數(shù)給每條曲線設(shè)置不同的顏色。但受到顯示器顯示效果和人眼對(duì)不同顏色識(shí)別能力的制約,當(dāng)二維曲線數(shù)量達(dá)到幾十條甚至上百條的時(shí)候,操作人員很難通過(guò)顏色或圖例來(lái)區(qū)分不同通道的曲線,故程序中加入選中某條曲線的功能,利用Qt中的信號(hào)與槽機(jī)制,當(dāng)操作人員使用鼠標(biāo)選中某條曲線的時(shí)候會(huì)自動(dòng)釋放selectionChangedByUser()信號(hào),將其與槽函數(shù)關(guān)聯(lián),在槽函數(shù)中判斷graphs[i]->selected()為真時(shí)的i值,并將其更新到界面上,提示當(dāng)前選中的曲線序號(hào)。

3 應(yīng)用實(shí)例

在某型雷達(dá)項(xiàng)目顯控軟件開發(fā)中采用Qt5.7.0進(jìn)行校正樣本數(shù)據(jù)繪制和顯示,顯示效果如圖4所示。通過(guò)實(shí)際應(yīng)用,證明該曲線窗可以很好的滿足項(xiàng)目的實(shí)際需求,并且在開發(fā)新項(xiàng)目和在不同的平臺(tái)上移植時(shí)都簡(jiǎn)便快捷。

【參考文獻(xiàn)】

[1]丁鷺飛,耿富錄.雷達(dá)原理[M].4版.西安:西安電子科技大學(xué)出版社,2009:4.

[2]陳俊良,葉林,葛俊鋒,等.TeeChart控件在實(shí)時(shí)檢測(cè)系統(tǒng)上位機(jī)軟件中的應(yīng)用[J].2015,28(6):13-15.

[3]高菲,袁媛,林成地,等.Qwt類庫(kù)在二維云圖繪制中的應(yīng)用[J].現(xiàn)代電子技術(shù),2014,37(14):100-102.