Qwt開發筆記(一):Qwt簡介、下載以及基礎demo工程模板
前言
QWT開發筆記系列整理集合,這是目前使用最為廣泛的Qt圖表類(Qt的QWidget程式碼方向只有QtCharts,Qwt,QCustomPlot),使用多年,系統性的整理,本系列旨在系統解說並逐步更新其各種Demo示例。
注意
本文章介紹的版本為Qwt6.2.0,該版本為2021年7月左右釋出的。
多年前文章
(本篇不再整理了)
《Qt開發筆記之Qwt(一):Qwt介紹、編譯與Demo》
《Qt開發筆記之Qwt(二):Qwt儀表盤的基本使用》
Demo演示
Qwt簡介
簡介
Qwt庫包含GUI元件和實用程式類,它們主要用於具有技術背景的程式。除了2D繪圖框架外,它還提供了刻度、滑塊、刻度盤、圓規、溫度計、輪子和旋鈕,以控制或顯示值、陣列或雙精度範圍。
支援Qt版本
Qwt 6.2可能適用於您找到Qt的所有環境。它與Qt 4.8和所有Qt5版本相容。
演示圖
曲線圖
光譜圖,等高線圖
條形圖、柱狀圖
其他繪圖
錶盤、圓規、旋鈕、滑塊等
下載
Qt平臺所有>=Qt 4.8的版本都將在6.x分支中得到主動支援。
sourceforge下載地址:https://sourceforge.net/projects/qwt/files
csdn粉絲0積分下載地址:https://download.csdn.net/download/qq21497936/87231942
壓縮包包含了:
- qwt-6.2.0.zip
帶有Qwt原始碼的Zip檔案和Windows的html文件 - qwt-6.2.0標準bz2
壓縮的tar檔案,帶有Qwt原始碼和UNIX系統(Linux、Mac…)的html文件 - qwt-6.2.0.pdf
Qwt文件為PDF文件。 - qwt-6.2.0.qch
Qwt文件作為Qt壓縮幫助文件,可以載入到Qt助手或建立者中。在Qt Creator中,上下文相關的幫助將像Qt類一樣可用。
模組化部署到工程
這裡我們跟常規方式不一樣,常規方式是先編譯然後加入到專案中,我們是直接原始碼帶入到原始碼中編譯,第一次編譯時間會較長,但是後續不暴露qwt的動態庫,更重要的時候,當我們靈活切換平臺的時候,不需在編譯庫和引入庫上額外花費時間,以達到模組化新增的終極目的—包含模組.pri檔案即可。
檢視qwt.pro檔案:
所以,包含原始碼src工程即可,然後檢視src.下:
所以包含src.pri即可。
最終qwt6.2.20.pri模組內容如下:
這時候引入不進去:
需要多做兩步驟,如下圖:
把所檔案前面加上$$PWD(修改之前,請copy一份備份),還得包含pro編譯時的三個配置檔案,如下圖:
最終帶qwt6.2.0原始碼模組如下:
然後qmake,編譯(主要檢測一下是否移植到工程當作模組化原始碼成功):
使用-j8不到3分鐘就編完了,後續開發中因為此模組作為原始碼模組包含,在非clean模式下,只需要編譯一次,但是避免了不同環境移植工程出現的各種環境問題,讓團隊成員之間互動,已經模組包含組裝最簡單化,從而提升溝通效率和開發效率。
模組化
基礎環境Demo
這裡我們做一個只是呼叫圖的簡單使用,用來確認該模組可以被呼叫,能正常工作,搭建基礎模板demo。
演示效果
初始化原始碼
void TestWidget::initQwt()
{
_pQwtPlot = new QwtPlot(this);
// 設定背景色
_pQwtPlot->setCanvasBackground(QBrush(QColor(255, 255, 255)));
// 設定x1座標軸
{
_pQwtPlot->setAxisTitle(QwtPlot::xBottom, "時間(s)");
}
// 設定y1座標軸
{
_pQwtPlot->setAxisTitle(QwtPlot::yLeft, "採集數值");
}
// 設定繪圖區域網格
{
QwtPlotGrid *pGrid = new QwtPlotGrid();
pGrid->setMajorPen(Qt::gray, 1, Qt::SolidLine);
pGrid->attach(_pQwtPlot);
}
// 設定圖例
{
QwtLegend *pLegend = new QwtLegend();
pLegend->setDefaultItemMode(QwtLegendData::Checkable);
_pQwtPlot->insertLegend(pLegend, QwtPlot::TopLegend);
}
// 設定曲線0
{
QwtPlotCurve *pCurve = new QwtPlotCurve();
pCurve->setTitle("電壓(mV)");
pCurve->setPen(Qt::blue, 2);
pCurve->setRenderHint(QwtPlotItem::RenderAntialiased, true);
// 曲線0符號物件
{
QwtSymbol *pSymbol = new QwtSymbol(QwtSymbol::Ellipse);
pSymbol->setPen(Qt::red);
pSymbol->setSize(4);
}
// 曲線0資料
{
QVector<double> vectorX;
QVector<double> vectorY;
vectorX.append(0); vectorY.append(0);
vectorX.append(1); vectorY.append(2);
vectorX.append(2); vectorY.append(3);
vectorX.append(4); vectorY.append(4);
pCurve->setSamples(vectorX, vectorY);
// 將曲線新增到繪圖
pCurve->attach(_pQwtPlot);
}
}
}
基礎模板v1.0.0
入坑
入坑一:融合之後,定義槽函式slots關鍵字錯誤
問題
原因
由於使用了QT_NO_KEYWORDS巨集定義,因此emit、signals、slots都不用使用了,如果想使用訊號槽機制的話,必須用巨集來代替,分別是Q_EMIT、Q_SIGNALS、Q_SLOTS。
解決
直接去掉,不然我們之前的模組將需要大面積更改。
修改後,沒發現出現問題,也就這樣解決了。