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。
   在這裏插入圖片描述

解決

  直接去掉,不然我們之前的模塊將需要大面積更改。
  在這裏插入圖片描述
  修改後,沒發現出現問題,也就這樣解決了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章