Qt-QCustomplot畫靜態、動態曲線教程圖解


https://blog.csdn.net/qq_40194498/article/details/79666903

1、QCustomPlot介紹QCustomPlot是一個小型的Qt畫圖標類,支持繪制靜態曲線、動態曲線、多重坐標曲線,柱狀圖,蠟燭圖等。只需要在項目中加入頭文件qcustomplot.h和qcustomplot.cpp文件,然后使一個widget提升為QCustomPlot類,即可使用。
QCustomPlot官網:
  http://www.qcustomplot.com/1QCustomPlot下載地址:
  http://www.qcustomplot.com/index.php/download 1QCustomPlot幫助文件QCustomPlot源碼包中,有QCustomPlot幫助文件,將其添加進Qt幫助文件,如圖,點擊添加按鈕,在下載的QCustomPlot源碼包中找到qch為后綴的文件進行添加。

2、簡單例子詳解:
建立Qt工程,將下載的QCustomPlot源碼中的qcustomplot.h和qcustomplot.cpp文件復制到項目所在文件夾,如圖QtCreater中,右鍵項目,添加現有文件,如圖,選擇qcustomplot.h和qcustomplot.cpp添加:
在UI界面拖入一個widget,如圖
UI界面右鍵widget,點擊提升為,選擇全局包含,如圖
這里強調一下:Qt提升控件時,通常提升的類名稱中,每個單詞的首字母必須大寫【與Qt控件命名規則保持一致,各種第三方控件都采用這種命名格式】,否則無法識別,如這里必須寫成QCustomPlot而不能寫成Qcustomplot或qcustomplot另一種簡單方法是將被提升類的名稱直接復制過來粘貼。選擇項目的.pro文件,添加printsupport,如圖,QCustomPlot包含了一些打印的東西,如果沒有這一步,程序會報錯-最后一步,編寫代碼:頭文件:#ifndef WIDGET_H#define WIDGET_H
#include <QWidget>#include "qcustomplot.h"namespace Ui {class Widget;}
class Widget : public QWidget{    Q_OBJECT
public:    explicit Widget(QWidget *parent = 0);    ~Widget();
private:    Ui::Widget *ui;};
#endif // WIDGET_H1234567891011121314151617181920212223cpp文件:
#include "widget.h"#include "ui_widget.h"#include <QVector>Widget::Widget(QWidget *parent) :    QWidget(parent),    ui(new Ui::Widget){    ui->setupUi(this);         //設定背景為黑色        //ui->widget->setBackground(QBrush(Qt::black));        //設定右上角圖形標注可見        ui->widget->legend->setVisible(true);        //設定右上角圖形標注的字體        ui->widget->legend->setFont(QFont("Helvetica", 9));        QVector<double> x(101),y(101);            //圖形為y=x^3            for(int i=0;i<101;i++)            {                x[i] = i/5.0-10;                y[i] = x[i]*x[i]*x[i];//qPow(x[i],3)            }            //添加圖形            ui->widget->addGraph();            //設置畫筆            ui->widget->graph(0)->setPen(QPen(Qt::blue));            //設置畫刷,曲線和X軸圍成面積的顏色             ui->widget->graph(0)->setBrush(QBrush(QColor(255,255,0)));            //設置右上角圖形標注名稱            ui->widget->graph(0)->setName("曲線");            //傳入數據,setData的兩個參數類型為double            ui->widget->graph(0)->setData(x,y);
            QVector<double> temp(20);            QVector<double> temp1(20);            //圖形為y = 100*x;            for(int i=0;i<20;i++)            {                temp[i] = i;                temp1[i] = 10*i+10;            }            //添加圖形            ui->widget->addGraph();            //設置畫筆            ui->widget->graph(1)->setPen(QPen(Qt::red));            //設置畫刷,曲線和X軸圍成面積的顏色            //ui->widget->graph(1)->setBrush(QBrush(QColor(0,255,0)));              //傳入數據            ui->widget->graph(1)->setData(temp,temp1);  
            /*-------------------------------------------*/            //畫動態曲線時,傳入數據采用addData,通過定時器多次調用,並在之后調用ui->widget->replot();             //動態曲線可以通過另一種設置坐標的方法解決坐標問題:             //setRange ( double  position, double  size, Qt::AlignmentFlag  alignment  )              //參數分別為:原點,偏移量,對其方式,有興趣的讀者可自行嘗試,歡迎垂詢              /*-------------------------------------------*/ 
            //設置右上角圖形標注名稱            ui->widget->graph(1)->setName("直線");            //設置X軸文字標注            ui->widget->xAxis->setLabel("time");            //設置Y軸文字標注            ui->widget->yAxis->setLabel("temp/shidu");            //設置X軸坐標范圍            ui->widget->xAxis->setRange(-20,20);            //設置Y軸坐標范圍            ui->widget->yAxis->setRange(-1100,1100);            //在坐標軸右側和上方畫線,和X/Y軸一起形成一個矩形            ui->widget->axisRect()->setupFullAxesBox(); }
Widget::~Widget(){    delete ui;}
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576效果如圖:
————————————————版權聲明:本文為CSDN博主「52_赫茲的鯨」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。原文鏈接:https://blog.csdn.net/qq_40194498/java/article/details/79666903


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM