Qwt開發(fā)筆記(一):Qwt簡(jiǎn)介、下載以及基礎(chǔ)demo工程模板
前言
??QWT開發(fā)筆記系列整理集合,這是目前使用最為廣泛的Qt圖表類(Qt的QWidget代碼方向只有QtCharts,Qwt,QCustomPlot),使用多年,系統(tǒng)性的整理,本系列旨在系統(tǒng)解說(shuō)并逐步更新其各種Demo示例。
注意
??本文章介紹的版本為Qwt6.2.0,該版本為2021年7月左右發(fā)布的。
多年前文章
??(本篇不再整理了)
??《Qt開發(fā)筆記之Qwt(一):Qwt介紹、編譯與Demo》
??《Qt開發(fā)筆記之Qwt(二):Qwt儀表盤的基本使用》
Demo演示
??

Qwt簡(jiǎn)介
簡(jiǎn)介
??Qwt庫(kù)包含GUI組件和實(shí)用程序類,它們主要用于具有技術(shù)背景的程序。除了2D繪圖框架外,它還提供了刻度、滑塊、刻度盤、圓規(guī)、溫度計(jì)、輪子和旋鈕,以控制或顯示值、數(shù)組或雙精度范圍。
支持Qt版本
??Qwt 6.2可能適用于您找到Qt的所有環(huán)境。它與Qt 4.8和所有Qt5版本兼容。
演示圖
曲線圖
??

光譜圖,等高線圖
??

條形圖、柱狀圖
??

其他繪圖
??

表盤、圓規(guī)、旋鈕、滑塊等
??

下載
??Qt平臺(tái)所有>=Qt 4.8的版本都將在6.x分支中得到主動(dòng)支持。
??sourceforge下載地址:https://sourceforge.net/projects/qwt/files
??
??壓縮包包含了:
qwt-6.2.0.zip
帶有Qwt源碼的Zip文件和Windows的html文檔qwt-6.2.0標(biāo)準(zhǔn)bz2
壓縮的tar文件,帶有Qwt源代碼和UNIX系統(tǒng)(Linux、Mac…)的html文檔qwt-6.2.0.pdf
Qwt文檔為PDF文檔。qwt-6.2.0.qch
??Qwt文檔作為Qt壓縮幫助文檔,可以加載到Qt助手或創(chuàng)建者中。在Qt Creator中,上下文相關(guān)的幫助將像Qt類一樣可用。
模塊化部署到工程
??這里我們跟常規(guī)方式不一樣,常規(guī)方式是先編譯然后加入到項(xiàng)目中,我們是直接源碼帶入到源碼中編譯,第一次編譯時(shí)間會(huì)較長(zhǎng),但是后續(xù)不暴露qwt的動(dòng)態(tài)庫(kù),更重要的時(shí)候,當(dāng)我們靈活切換平臺(tái)的時(shí)候,不需在編譯庫(kù)和引入庫(kù)上額外花費(fèi)時(shí)間,以達(dá)到模塊化添加的終極目的—包含模塊.pri文件即可。
??查看qwt.pro文件:
??

??所以,包含源碼src工程即可,然后查看src.下:
??

??所以包含src.pri即可。
??最終qwt6.2.20.pri模塊內(nèi)容如下:
??

??這時(shí)候引入不進(jìn)去:
??

??需要多做兩步驟,如下圖:
??

??把所文件前面加上$$PWD(修改之前,請(qǐng)copy一份備份),還得包含pro編譯時(shí)的三個(gè)配置文件,如下圖:
??

??最終帶qwt6.2.0源碼模塊如下:
??

??然后qmake,編譯(主要檢測(cè)一下是否移植到工程當(dāng)作模塊化源碼成功):
??

??使用-j8不到3分鐘就編完了,后續(xù)開發(fā)中因?yàn)榇四K作為源碼模塊包含,在非clean模式下,只需要編譯一次,但是避免了不同環(huán)境移植工程出現(xiàn)的各種環(huán)境問題,讓團(tuán)隊(duì)成員之間交互,已經(jīng)模塊包含組裝最簡(jiǎn)單化,從而提升溝通效率和開發(fā)效率。
模塊化
??

基礎(chǔ)環(huán)境Demo
??這里我們做一個(gè)只是調(diào)用圖的簡(jiǎn)單使用,用來(lái)確認(rèn)該模塊可以被調(diào)用,能正常工作,搭建基礎(chǔ)模板demo。
演示效果
??

??

初始化源碼
void TestWidget::initQwt(){
? ?_pQwtPlot = new QwtPlot(this);
? ?// 設(shè)置背景色
? ?_pQwtPlot->setCanvasBackground(QBrush(QColor(255, 255, 255)));
? ?// 設(shè)置x1坐標(biāo)軸
? ?{
? ? ? ?_pQwtPlot->setAxisTitle(QwtPlot::xBottom, "時(shí)間(s)");
? ?}
? ?// 設(shè)置y1坐標(biāo)軸
? ?{
? ? ? ?_pQwtPlot->setAxisTitle(QwtPlot::yLeft, "采集數(shù)值");
? ?}
? ?// 設(shè)置繪圖區(qū)域網(wǎng)格
? ?{
? ? ? ?QwtPlotGrid *pGrid = new QwtPlotGrid();
? ? ? ?pGrid->setMajorPen(Qt::gray, 1, Qt::SolidLine);
? ? ? ?pGrid->attach(_pQwtPlot);
? ?}
? ?// 設(shè)置圖例
? ?{
? ? ? ?QwtLegend *pLegend = new QwtLegend();
? ? ? ?pLegend->setDefaultItemMode(QwtLegendData::Checkable);
? ? ? ?_pQwtPlot->insertLegend(pLegend, QwtPlot::TopLegend);
? ?}
? ?// 設(shè)置曲線0
? ?{
? ? ? ?QwtPlotCurve *pCurve = new QwtPlotCurve();
? ? ? ?pCurve->setTitle("電壓(mV)");
? ? ? ?pCurve->setPen(Qt::blue, 2);
? ? ? ?pCurve->setRenderHint(QwtPlotItem::RenderAntialiased, true);
? ? ? ?// 曲線0符號(hào)對(duì)象
? ? ? ?{
? ? ? ? ? ?QwtSymbol *pSymbol = new QwtSymbol(QwtSymbol::Ellipse);
? ? ? ? ? ?pSymbol->setPen(Qt::red);
? ? ? ? ? ?pSymbol->setSize(4);
? ? ? ?}
? ? ? ?// 曲線0數(shù)據(jù)
? ? ? ?{
? ? ? ? ? ?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);
? ? ? ?}
? ?}}
基礎(chǔ)模板v1.0.0
???

入坑
入坑一:融合之后,定義槽函數(shù)slots關(guān)鍵字錯(cuò)誤
問題
??

原因
??

??由于使用了QT_NO_KEYWORDS宏定義,因此emit、signals、slots都不用使用了,如果想使用信號(hào)槽機(jī)制的話,必須用宏來(lái)代替,分別是Q_EMIT、Q_SIGNALS、Q_SLOTS。
???

解決
??直接去掉,不然我們之前的模塊將需要大面積更改。
??

??修改后,沒發(fā)現(xiàn)出現(xiàn)問題,也就這樣解決了。