• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      淺談Qt的圖表開(kāi)發(fā)

      2018-05-14 13:50陳嘉敏趙云峰史家樂(lè)
      好日子(下旬) 2018年1期
      關(guān)鍵詞:圖表數(shù)據(jù)庫(kù)

      陳嘉敏 趙云峰 史家樂(lè)

      摘 要:在實(shí)際開(kāi)發(fā)中如果我們想要快速的開(kāi)發(fā)出一款簡(jiǎn)單實(shí)用的上位機(jī)軟件,而我們又是側(cè)重底層開(kāi)發(fā)或者剛?cè)腴T(mén)的新手,先前沒(méi)有進(jìn)行過(guò)相關(guān)的操作,這時(shí)Qt將是你的一個(gè)非常好的選擇。Qt采用C++進(jìn)行編程,完全向下兼容C語(yǔ)言,而且還有豐富的控件,這對(duì)于新手是非常容易上手的。而且Qt自帶了很多模塊,為我們的帶來(lái)了很多便利。本文我將著重就上位機(jī)開(kāi)發(fā)中經(jīng)常要用到的數(shù)據(jù)處理結(jié)合我前些日子做的一個(gè)小例子給大家分享一下如何用Qt實(shí)現(xiàn)數(shù)據(jù)的接收、存儲(chǔ)和圖形化顯示。

      關(guān)鍵詞:Qt;圖表;數(shù)據(jù)庫(kù)

      引言

      本人一直在從事的都是底層的硬件驅(qū)動(dòng),使用的都是面向過(guò)程的語(yǔ)言C語(yǔ)言。但前些日子由于業(yè)務(wù)需求需要開(kāi)發(fā)一個(gè)簡(jiǎn)單的上位軟件監(jiān)控界面,因此自學(xué)了C++和Qt,并最終完成了該監(jiān)控界面程序的開(kāi)發(fā),可以實(shí)現(xiàn)常用的數(shù)據(jù)圖表化顯示,實(shí)現(xiàn)簡(jiǎn)單的曲線圖的繪制。下面我將簡(jiǎn)單總結(jié)一下這段時(shí)間以來(lái)本人的一些經(jīng)驗(yàn)和遇到的問(wèn)題,希望能給有這方面需求的人帶來(lái)一些幫助。

      一、準(zhǔn)備工作

      1)在工程的pro文件中添加QT += charts,這個(gè)語(yǔ)句是用來(lái)導(dǎo)入圖表模塊charts,如果沒(méi)有導(dǎo)入這個(gè)模塊,圖表相關(guān)的類(lèi)都不能使用。

      2)在mainwindow.h中添加#include,包含圖表類(lèi)通用的頭文件,在使用各自的類(lèi)時(shí)要添加相應(yīng)的頭文件.

      3)在mainwindow.h中添加如下代碼:

      QT_CHARTS_BEGIN_NAMESPACE

      class QLineSeries;

      class QChart;

      QT_CHARTS_END_NAMESPACE

      QT_CHARTS_USE_NAMESPACE

      代碼分析:從Qt源碼定義中可以看出若把上面的代碼展開(kāi)看,就是定義了一個(gè)命名空間QT_CHARTS_NAMESPACE,并把需要的兩個(gè)類(lèi)添加進(jìn)這個(gè)命名空間中。

      二、相關(guān)的類(lèi)及具體實(shí)現(xiàn)

      想要在Qt中實(shí)現(xiàn)曲線圖的繪制需要的最基本的類(lèi)即為Qchart類(lèi),除此之外還需要QLineSeries、QChartView、QValueAxis等類(lèi)。下面我將一一介紹各個(gè)類(lèi)的作用

      1)QValueAxis類(lèi)

      這個(gè)類(lèi)的作用是用來(lái)自定義坐標(biāo)軸的。其實(shí)Qchart類(lèi)里也有一個(gè)默認(rèn)的坐標(biāo)軸,但是一般都不太符合我們的要求,所以一般的做法就是使用這個(gè)類(lèi)定義一個(gè)新的(坐標(biāo)軸)對(duì)象,設(shè)置相應(yīng)的參數(shù)后設(shè)置為Qchar的默認(rèn)坐標(biāo)軸。應(yīng)用代碼如下:

      QValueAxis *axisX = new QValueAxis;axisX->setRange(0,10);//設(shè)置坐標(biāo)軸范圍

      axisX->setLabelFormat("%g");//設(shè)置坐標(biāo)軸格axisX->setTitleText("Samples");

      QValueAxis *axisY = new QValueAxis;axisY->setRange(0,100);

      axisY->setTitleText("Humility");

      2)QLineSeries類(lèi)

      這個(gè)類(lèi)還有幾個(gè)相似的類(lèi),例QXYSeries類(lèi)、QSplineSeries類(lèi)等,這些類(lèi)的都是用來(lái)平滑曲線,實(shí)現(xiàn)把點(diǎn)連接成線的目的。使用時(shí)只要把關(guān)鍵坐標(biāo)點(diǎn)添加進(jìn)則幾個(gè)點(diǎn)集中,然后再把這些點(diǎn)集設(shè)置成表格圖像要顯示的點(diǎn)集即可。要注意的是這幾個(gè)類(lèi)對(duì)關(guān)鍵點(diǎn)的處理方式是不同的,QLineSeries類(lèi)會(huì)把添加進(jìn)的點(diǎn)以直線方式連接,也即之后會(huì)生成折線圖,而QSplineSeries類(lèi)會(huì)把關(guān)鍵點(diǎn)以平滑曲線連接,也即最后會(huì)生成一個(gè)曲線圖,在本次項(xiàng)目中我選擇的是QLineSeries類(lèi)來(lái)連接關(guān)鍵點(diǎn),生成曲線圖。代碼示例如下:

      QLineSeries *m_series = new QLineSeries;

      QVector points;//矢量點(diǎn)集

      points.append(QPointF(0,20));points.append(QPointF(1,23));

      points.append(QPointF(2,12));points.append(QPointF(3,45));

      points.append(QPointF(4,23));points.append(QPointF(5,43));

      points.append(QPointF(6,3)); points.append(QPointF(7,43));

      points.append(QPointF(8,89));points.append(QPointF(9,34));

      points.append(QPointF(10,76));

      m_series->replace(points);

      代碼分析:上面的代碼先是定義了一個(gè)矢量點(diǎn)集points,然后向這個(gè)點(diǎn)集中添加了11個(gè)點(diǎn)的坐標(biāo),然后用replace函數(shù)替代m_series中的默認(rèn)坐標(biāo)點(diǎn)集。

      3)QChart類(lèi)設(shè)置圖表格式

      QChart類(lèi)是真正用來(lái)生成圖形曲線的,用這個(gè)類(lèi)可以對(duì)生成的曲線圖進(jìn)行各種格式的設(shè)置,代碼如下:

      QChart *m_chart = new QChart;m_chart->addSeries(m_series);//添加系列

      m_chart->setAxisX(axisX,m_series);//設(shè)置橫坐標(biāo)軸

      m_chart->setAxisY(axisY,m_series);//設(shè)置縱坐標(biāo)軸

      m_chart->legend()->hide();//將默認(rèn)的圖例樣式隱藏

      m_chart->setTitle("Chart test");//設(shè)置標(biāo)題

      4)QchartView類(lèi)顯示出圖表

      QchartView類(lèi)的作用是為了顯示的顯示出圖表,代碼設(shè)置如下:

      QChartView *chartView = newQChartView(m_chart);chartView->setParent(this);

      代碼分析:第一句代碼的作用是定義一個(gè)QChartView類(lèi)的對(duì)象指針,同時(shí)為該指針開(kāi)辟空間,并調(diào)用構(gòu)造函數(shù)用先前設(shè)置好的圖表m_chart去初始化該對(duì)象。第二句代碼的作用是把該對(duì)象指針(控件)添加進(jìn)主窗口,以能夠顯示在主窗上。

      最后整體的顯示效果圖如下:

      參考文獻(xiàn)

      [1](美)普拉達(dá)(Prata,S.)著;姜佑譯.C Primer Plus(第6版)[M].北京:人民郵電出版社,2016:576-589

      [2](美)Bruce Eckel.Thinking in C++(第一卷)[M].(美)新澤西:Prentice Hall,1998:319-454

      [3]霍亞飛.Qt Creator快速入門(mén)[M].北京:北京航空航天大學(xué)出版社,2012,5:367-383

      [4]霍亞飛.Qt及Qt Quick開(kāi)發(fā)實(shí)戰(zhàn)精解[M].北京:北京航空航天大學(xué)出版社,2012,5:79-100

      猜你喜歡
      圖表數(shù)據(jù)庫(kù)
      數(shù)據(jù)庫(kù)
      數(shù)據(jù)庫(kù)
      圖表
      雙周圖表
      雙周圖表
      圖表
      雙周圖表
      圖表
      數(shù)據(jù)庫(kù)
      數(shù)據(jù)庫(kù)
      栖霞市| 延川县| 烟台市| 安宁市| 保亭| 博罗县| 沙洋县| 华蓥市| 宜兰县| 潜江市| 凤庆县| 襄汾县| 遵化市| 保德县| 阿坝| 汪清县| 麻城市| 余姚市| 札达县| 乌兰浩特市| 咸丰县| 右玉县| 旌德县| 阿拉善右旗| 嘉峪关市| 靖宇县| 灵宝市| 巴林左旗| 虎林市| 封丘县| 巢湖市| 武冈市| 清新县| 邢台市| 夏津县| 昌都县| 霍山县| 黄冈市| 广饶县| 江陵县| 中方县|