久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

基于Qt繪制科學(xué)圖表 -- Qwt試用

 guitarhua 2012-11-29

基于Qt繪制科學(xué)圖表 -- Qwt試用

分類: QT開發(fā) 384人閱讀 評論(0) 收藏 舉報

打算用qwt寫儀表界面,,轉(zhuǎn)一篇shiroki大牛的qwt試用文章,以備查詢,。,。。

 

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

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

當(dāng)然按照正常的順序,, 我們還是從編譯安裝開始,。 從svn服務(wù)器上下載最新代碼:svn co https://qwt.svn./svnroot/qwt/trunk/qwt
進入qwt目錄, 運行你電腦上qt4對應(yīng)的qmake,, 再運行make編譯,。如筆者環(huán)境中是
$ cd qwt
$ export PATH=/usr/local/Trolltech/Qt-4.5.1/bin/:$PATH
$ qmake
$ make

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

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

simple是qwt自帶的例子中最簡單的一個,, 一共只有一百來行的代碼,, 實現(xiàn)了數(shù)學(xué)中的正弦函數(shù)(sin())和余弦函數(shù)(cos())曲線。 如下圖:
simple
這個例子里用到的核心類有四個(以下內(nèi)容是筆者的理解,, 有可能有不對的地方,, 請酌情閱讀):
QwtPlot
類似一個2D繪圖的容器, 里面可以放其他的QwtPlotItem派生類對象,, 比如本例子中使用的QwtPlotMarker等,。(有點類似Qt里的graphicsview的感覺。) 這個類負責(zé)控制繪圖數(shù)據(jù)的產(chǎn)生和傳遞,, 并且繪制一個坐標(biāo)軸,。
QwtPlotMarker
標(biāo)尺類,, 用于繪制刻度線,。
QwtPlotCurve
曲線類, 用于繪制各種曲線,。
QwtSyntheticPointData
比 較奇怪,, 這是個undocumented的類, 估計不小心被作者遺漏了,, 文檔中沒有提供該類的說明,, 只能從源碼中尋找答案了, 這一點很讓人郁悶,。 通過看code當(dāng)中的注釋和例子代碼,, 筆者的理解是該類負責(zé)產(chǎn)生數(shù)據(jù), 它的作用是提供固定數(shù)量的浮點數(shù)的點,, 點的數(shù)量在構(gòu)造類時傳入,。 獲取數(shù)據(jù)時QwtPlotCurve類會調(diào)用該類的y()方法獲取縱坐標(biāo)。

程序的基本流程是:
1,、初始化繪圖容器,, 設(shè)置坐標(biāo)軸的參數(shù)
// Set axes
setAxisTitle(xBottom, “x –>”);
setAxisScale(xBottom, 0.0, 10.0);//橫坐標(biāo)從0到10, xBottom表示橫坐標(biāo)的方向從下往上

setAxisTitle(yLeft, “y –>”);
setAxisScale(yLeft, -1.0, 1.0); //縱坐標(biāo)-1到1,,yLeft表示縱坐標(biāo)的方向從左到右

2,、添加正弦余弦曲線
// Insert new curves
QwtPlotCurve *cSin = new QwtPlotCurve(“y = sin(x)”);
#if QT_VERSION >= 0×040000
cSin->setRenderHint(QwtPlotItem::RenderAntialiased);
#endif
cSin->setPen(QPen(Qt::red));//紅色曲線
cSin->attach(this);

QwtPlotCurve *cCos = new QwtPlotCurve(“y = cos(x)”);
#if QT_VERSION >= 0×040000
cCos->setRenderHint(QwtPlotItem::RenderAntialiased);
#endif
cCos->setPen(QPen(Qt::blue));//藍色曲線
cCos->attach(this);

3、設(shè)置曲線的數(shù)據(jù)內(nèi)容
// Create sin and cos data
cSin->setData(FunctionData(::sin));
cCos->setData(FunctionData(::cos));

4,、添加橫縱標(biāo)尺線作為坐標(biāo)的參照
// Insert markers
//  …a horizontal line at y = 0…
QwtPlotMarker *mY = new QwtPlotMarker();
mY->setLabel(QString::fromLatin1(“y = 0″));
mY->setLabelAlignment(Qt::AlignRight|Qt::AlignTop);
mY->setLineStyle(QwtPlotMarker::HLine);//線的方向
mY->setYValue(0.0);//標(biāo)尺線畫在y=0的位置
mY->attach(this);

//  …a vertical line at x = 2 * pi
QwtPlotMarker *mX = new QwtPlotMarker();
mX->setLabel(QString::fromLatin1(“x = 2 pi”));
mX->setLabelAlignment(Qt::AlignLeft | Qt::AlignBottom);
mX->setLabelOrientation(Qt::Vertical);
mX->setLineStyle(QwtPlotMarker::VLine);
mX->setLinePen(QPen(Qt::black, 0, Qt::DashDotLine));
mX->setXValue(2.0 * M_PI);//該標(biāo)線畫在x=2PI的位置
mX->attach(this);

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

histogram

cpuplot

oscilloscope

轉(zhuǎn)自:http://www./blog/?p=493

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多