溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

qt中QCustomplot庫如何生成靜態(tài)、動態(tài)曲線

發(fā)布時間:2021-06-24 10:34:18 來源:億速云 閱讀:580 作者:小新 欄目:編程語言

這篇文章主要介紹了qt中QCustomplot庫如何生成靜態(tài)、動態(tài)曲線,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

Qt曲線圖模塊QCustomPlot庫介紹

QCustomPlot是一個小型的Qt畫圖標類,支持繪制靜態(tài)曲線、動態(tài)曲線、多重坐標曲線,柱狀圖,蠟燭圖等。只需要在項目中加入頭文件qcustomplot.h和qcustomplot.cpp文件,然后使一個widget提升為QCustomPlot類,即可使用。

QCustomPlot官網(wǎng):

  http://www.qcustomplot.com/

QCustomPlot下載地址:

  http://www.qcustomplot.com/index.php/download 

QCustomPlot幫助文件

QCustomPlot源碼包中,有QCustomPlot幫助文件,將其添加進Qt幫助文件,如圖,點擊添加按鈕,在下載的QCustomPlot源碼包中找到qch為后綴的文件進行添加。

qt中QCustomplot庫如何生成靜態(tài)、動態(tài)曲線

Qt曲線圖模塊QCustomPlot庫簡單例子詳解

1.建立Qt工程,將下載的QCustomPlot源碼中的qcustomplot.h和qcustomplot.cpp文件復(fù)制到項目所在文件夾,如圖

qt中QCustomplot庫如何生成靜態(tài)、動態(tài)曲線

2.QtCreater中,右鍵項目,添加現(xiàn)有文件,如圖,選擇qcustomplot.h和qcustomplot.cpp添加:

qt中QCustomplot庫如何生成靜態(tài)、動態(tài)曲線

3.在UI界面拖入一個widget,如圖

qt中QCustomplot庫如何生成靜態(tài)、動態(tài)曲線

4.UI界面右鍵widget,點擊提升為,選擇全局包含,如圖

qt中QCustomplot庫如何生成靜態(tài)、動態(tài)曲線

這里強調(diào)一下:Qt提升控件時,通常提升的類名稱中,每個單詞的首字母必須大寫【與Qt控件命名規(guī)則保持一致,各種第三方控件都采用這種命名格式】,否則無法識別,如這里必須寫成QCustomPlot而不能寫成Qcustomplot或qcustomplot

另一種簡單方法是將被提升類的名稱直接復(fù)制過來粘貼。

5.選擇項目的.pro文件,添加printsupport,如圖,QCustomPlot包含了一些打印的東西,如果沒有這一步,程序會報錯

qt中QCustomplot庫如何生成靜態(tài)、動態(tài)曲線

6.最后一步,編寫代碼:

頭文件:

#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_H

cpp文件:

#include "widget.h"
#include "ui_widget.h"
#include <QVector>
Widget::Widget(QWidget *parent) :
  QWidget(parent),
  ui(new Ui::Widget)
{
  ui->setupUi(this); 
    //設(shè)定背景為黑色
    //ui->widget->setBackground(QBrush(Qt::black));
    //設(shè)定右上角圖形標注可見
    ui->widget->legend->setVisible(true);
    //設(shè)定右上角圖形標注的字體
    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();
      //設(shè)置畫筆
      ui->widget->graph(0)->setPen(QPen(Qt::blue));
      //設(shè)置畫刷,曲線和X軸圍成面積的顏色
       ui->widget->graph(0)->setBrush(QBrush(QColor(255,255,0)));
      //設(shè)置右上角圖形標注名稱
      ui->widget->graph(0)->setName("曲線");
      //傳入數(shù)據(jù),setData的兩個參數(shù)類型為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();
      //設(shè)置畫筆
      ui->widget->graph(1)->setPen(QPen(Qt::red));
      //設(shè)置畫刷,曲線和X軸圍成面積的顏色
      //ui->widget->graph(1)->setBrush(QBrush(QColor(0,255,0))); 
      //傳入數(shù)據(jù)
      ui->widget->graph(1)->setData(temp,temp1); 

      /*-------------------------------------------*/
      //畫動態(tài)曲線時,傳入數(shù)據(jù)采用addData,通過定時器多次調(diào)用,并在之后調(diào)用ui->widget->replot(); 
      //動態(tài)曲線可以通過另一種設(shè)置坐標的方法解決坐標問題: 
      //setRange ( double position, double size, Qt::AlignmentFlag alignment ) 
      //參數(shù)分別為:原點,偏移量,對其方式,有興趣的讀者可自行嘗試,歡迎垂詢 
      /*-------------------------------------------*/ 

      //設(shè)置右上角圖形標注名稱
      ui->widget->graph(1)->setName("直線");
      //設(shè)置X軸文字標注
      ui->widget->xAxis->setLabel("time");
      //設(shè)置Y軸文字標注
      ui->widget->yAxis->setLabel("temp/shidu");
      //設(shè)置X軸坐標范圍
      ui->widget->xAxis->setRange(-20,20);
      //設(shè)置Y軸坐標范圍
      ui->widget->yAxis->setRange(-1100,1100);
      //在坐標軸右側(cè)和上方畫線,和X/Y軸一起形成一個矩形
      ui->widget->axisRect()->setupFullAxesBox(); 
}

Widget::~Widget()
{
  delete ui;
}

效果圖如下:

qt中QCustomplot庫如何生成靜態(tài)、動態(tài)曲線

感謝你能夠認真閱讀完這篇文章,希望小編分享的“qt中QCustomplot庫如何生成靜態(tài)、動態(tài)曲線”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

qt
AI