自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

利用Qt繪圖實(shí)現(xiàn)QWT繪制科學(xué)圖表

移動開發(fā)
Qwt是一個基于LGPL版權(quán)協(xié)議的開源項(xiàng)目,其目標(biāo)是提供一組2D的窗體庫顯示技術(shù)領(lǐng)域的數(shù)據(jù)。該工具基于Qt開發(fā),所以也繼承了Qt的跨平臺特性。

Qwt是一個基于LGPL版權(quán)協(xié)議的開源項(xiàng)目,其目標(biāo)是提供一組2D的窗體庫顯示技術(shù)領(lǐng)域的數(shù)據(jù),數(shù)據(jù)源以浮點(diǎn)數(shù)組或范圍的方式提供,輸出方式可以是Curves(曲線),Slider(滾動條), Dials(圓盤),compasses(儀表盤)等等。該工具庫基于Qt開發(fā),所以也繼承了Qt的跨平臺特性,據(jù)原作者文檔所說,該項(xiàng)目在Qt-win/Qt-x11/Qt-embedded(qvfb環(huán)境上都測試過, 運(yùn)行正常。項(xiàng)目的主頁在:http://qwt.sourceforge.net/

在網(wǎng)上搜了一下,發(fā)現(xiàn)關(guān)于qwt的中文資料實(shí)在很少,基本上只有關(guān)于編譯和安裝的文章。實(shí)際上經(jīng)過筆者實(shí)踐,Qwt的編譯和運(yùn)行實(shí)在乏善可陳,qmake;make就可以搞定,沒什么可memo的東西,所以這篇文章將以掃盲為主,介紹Qwt的feature。

當(dāng)然按照正常的順序,我們還是從編譯安裝開始。從svn服務(wù)器上下載***代碼:svn co https://qwt.svn.sourceforge.net/svnroot/qwt/trunk/qwt

進(jìn)入qwt目錄, 運(yùn)行你電腦上qt4對應(yīng)的qmake, 再運(yùn)行make編譯。如筆者環(huán)境中是

  1. cd qwt  
  2. export PATH=/usr/local/Trolltech/Qt-4.5.1/bin/:$PATH  
  3. qmake  
  4. make 

編譯要花個幾分鐘的時間。 成功后在lib下會生成 libqwt.so*文件, 并且examples也參與編譯, 生成的binary在examples/bin下, 我們可以運(yùn)行這些例子初步查看qwt的功能。

  1. export LD_LIBRARY_PATH=$PWD/lib  
  2. cd examples/bin  
  3.  ./simple 

simple是qwt自帶的例子中最簡單的一個, 一共只有一百來行的代碼, 實(shí)現(xiàn)了數(shù)學(xué)中的正弦函數(shù)(sin())和余弦函數(shù)(cos())曲線。如圖:

利用Qt繪圖實(shí)現(xiàn)QWT繪制科學(xué)圖表

這個例子里用到的核心類有四個(以下內(nèi)容是筆者的理解, 有可能有不對的地方,請酌情閱讀):

QwtPlot

類似一個2D繪圖的容器, 里面可以放其他的QwtPlotItem派生類對象, 比如本例子中使用的QwtPlotMarker等。(有點(diǎn)類似Qt里的graphicsview的感覺。) 這個類負(fù)責(zé)控制繪圖數(shù)據(jù)的產(chǎn)生和傳遞, 并且繪制一個坐標(biāo)軸。

QwtPlotMarker

標(biāo)尺類, 用于繪制刻度線。

QwtPlotCurve

曲線類, 用于繪制各種曲線。

QwtSyntheticPointData

比較奇怪,這是個undocumented的類,估計(jì)不小心被作者遺漏了,文檔中沒有提供該類的說明,只能從源碼中尋找答案了,這一點(diǎn)很讓人郁悶。通過看code當(dāng)中的注釋和例子代碼,筆者的理解是該類負(fù)責(zé)產(chǎn)生數(shù)據(jù),它的作用是提供固定數(shù)量的浮點(diǎn)數(shù)的點(diǎn),點(diǎn)的數(shù)量在構(gòu)造類時傳入。獲取數(shù)據(jù)時QwtPlotCurve類會調(diào)用該類的y()方法獲取縱坐標(biāo)。

程序的基本流程是:

1、初始化繪圖容器, 設(shè)置坐標(biāo)軸的參數(shù)

  1. // Set axes  
  2. setAxisTitle(xBottom, “x –>”);  
  3. setAxisScale(xBottom, 0.0, 10.0);//橫坐標(biāo)從0到10, xBottom表示橫坐標(biāo)的方向從下往上  
  4.  
  5. setAxisTitle(yLeft, “y –>”);  
  6. setAxisScale(yLeft, -1.0, 1.0); //縱坐標(biāo)-1到1,yLeft表示縱坐標(biāo)的方向從左到右 

2、添加正弦余弦曲線

  1. // Insert new curves  
  2. QwtPlotCurve *cSin = new QwtPlotCurve(”y = sin(x)”);  
  3. #if QT_VERSION >= 0×040000  
  4. cSin->setRenderHint(QwtPlotItem::RenderAntialiased);  
  5. #endif  
  6. cSin->setPen(QPen(Qt::red));//紅色曲線  
  7. cSin->attach(this);  
  8.  
  9. QwtPlotCurve *cCos = new QwtPlotCurve(”y = cos(x)”);  
  10. #if QT_VERSION >= 0×040000  
  11. cCos->setRenderHint(QwtPlotItem::RenderAntialiased);  
  12. #endif  
  13. cCos->setPen(QPen(Qt::blue));//藍(lán)色曲線  
  14. cCos->attach(this); 

#p#

3、設(shè)置曲線的數(shù)據(jù)內(nèi)容

  1. // Create sin and cos data  
  2. cSin->setData(FunctionData(::sin));  
  3. cCos->setData(FunctionData(::cos)); 

4、添加橫縱標(biāo)尺線作為坐標(biāo)的參照

  1. // Insert markers  
  2. // …a horizontal line at y = 0…  
  3. QwtPlotMarker *mY = new QwtPlotMarker();  
  4. mY->setLabel(QString::fromLatin1(”y = 0″));  
  5. mY->setLabelAlignment(Qt::AlignRight|Qt::AlignTop);  
  6. mY->setLineStyle(QwtPlotMarker::HLine);//線的方向  
  7. mY->setYValue(0.0);//標(biāo)尺線畫在y=0的位置  
  8. mY->attach(this);  
  9.  
  10. // …a vertical line at x = 2 * pi  
  11. QwtPlotMarker *mX = new QwtPlotMarker();  
  12. mX->setLabel(QString::fromLatin1(”x = 2 pi”));  
  13. mX->setLabelAlignment(Qt::AlignLeft | Qt::AlignBottom);  
  14. mX->setLabelOrientation(Qt::Vertical);  
  15. mX->setLineStyle(QwtPlotMarker::VLine);  
  16. mX->setLinePen(QPen(Qt::black, 0, Qt::DashDotLine));  
  17. mX->setXValue(2.0 * M_PI);//該標(biāo)線畫在x=2PI的位置  
  18. mX->attach(this); 

同樣的功能如果用Qt來寫的話需要寫大量的繪圖代碼, 比較麻煩, 但使用Qwt的封裝庫代碼更OO且更容易理解和維護(hù)。 在這個例子中使用Qwt的優(yōu)勢體現(xiàn)得可能還不太明顯, 相比而言復(fù)雜一些的圖表更能體現(xiàn)Qwt的優(yōu)越性。 再來幾個例子的截圖:

利用Qt繪圖實(shí)現(xiàn)QWT繪制科學(xué)圖表

Qt繪圖 

Qt繪圖 

利用Qt繪圖實(shí)現(xiàn)QWT繪制科學(xué)圖表

小結(jié):通過這幾張圖片,可以看出,其實(shí)用Qt繪圖還是蠻不錯的。本篇的內(nèi)容希望對你有幫助哦!

【編輯推薦】

QT 4應(yīng)用程序解析

淺談Qt做文件瀏覽器

淺談Qt中多線程編程

在Qt中如何寫控制臺程序

諾基亞開發(fā)框架Qt的前世今生

基于Qt Web瀏覽器設(shè)計(jì)與實(shí)現(xiàn)

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號