Qt-QCustomplot画静态、动态曲线教程图解

1、QCustomPlot介绍 
QCustomPlot是一个小型的Qt画图标类,支持绘制静态曲线、动态曲线、多重坐标曲线,柱状图,蜡烛图等。只需要在项目中加入头文件qcustomplot.h和qcustomplot.cpp文件,然后使一个widget提升为QCustomPlot类,即可使用。

QCustomPlot官网:

  http://www.qcustomplot.com/

  例子与说明:

  https://www.qcustomplot.com/index.php/tutorials/basicplotting
1
QCustomPlot下载地址:

  http://www.qcustomplot.com/index.php/download 
1
QCustomPlot帮助文件 
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_H

cpp文件:

#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;
}
效果如图: 

--------------------- 
原文:https://blog.csdn.net/qq_40194498/article/details/79666903 
 

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QCustomPlot是一个基于Qt的开源C++图形库,可以用来绘制各种类型的图表,包括动态曲线图。它提供了丰富的功能和灵活的接口,可以满足不同需求的绘图需求。在使用QCustomPlot绘制动态曲线图时,可以通过添加数据点、设置坐标轴范围、设置曲线颜色等方式实现动态更新。同时,QCustomPlot还支持鼠标交互、图例显示、多图层等功能,方便用户进行数据分析和可视化。 ### 回答2: QCustomPlot是一个很好用的Qt绘图库,可以方便地为Qt应用程序绘制曲线图、柱状图、散点图、趋势图等等,支持多种图形效果和动效果。 要制作一个动态曲线图,首先需要设置曲线图的样式、颜色、轴等等,然后添加数据点并更新曲线图。具体实现步骤如下: Step1:引入QCustomPlot库和相关头文件。(如果使用Qt Creator,通过Qt Maintenance Tool安装QCustomPlot库,然后将头文件包含到项目中。) Step2:在UI窗口中添加QCustomPlot的widget,设定其大小和位置。 Step3:在代码里创建QCustomPlot对象,并设置X、Y轴的范围、精度、网格线等信息。 QCustomPlot *customplot = new QCustomPlot(this); customplot->xAxis->setRange(0, 10); //X轴范围 customplot->yAxis->setRange(-5, 5); //Y轴范围 customplot->xAxis->setAutoTickStep(false); customplot->xAxis->setTickStep(1); //X轴刻度步长 customplot->yAxis->setAutoTickStep(false); customplot->yAxis->setTickStep(1); //Y轴刻度步长 customplot->xAxis->grid()->setVisible(true); customplot->yAxis->grid()->setVisible(true); customplot->xAxis->setLabel("Time (s)"); //X轴标签 customplot->yAxis->setLabel("Amplitude"); //Y轴标签 customplot->addGraph(); customplot->graph(0)->setPen(QPen(Qt::blue)); //曲线颜色 Step4:每隔一段时间(例如100ms)更新一下QCustomPlot对象的数据,并刷新曲线图。 QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(updatePlot())); timer->start(100); // 100ms更新一次 //updatePlot()函数更新数据并刷新曲线图 void updatePlot() { static double t = 0; //时间 static QVector<double> x(101), y(101); //100个数据点 for (int i = 0; i < 101; ++i) { x[i] = t + i/100.0; y[i] = qSin(x[i]); } customplot->graph(0)->setData(x, y); customplot->replot(); //刷新曲线图 t += 0.1; //时间加0.1秒 } 这样,一个简单的动态曲线图就完成了。根据实际需要,可以进一步美化曲线图、调整曲线参数等等。 ### 回答3: Qt QCustomPlot是一个功能强大的C++绘图库,它可以用于创建各种各样的图表,包括动态曲线图。在Qt QCustomPlot中,可以使用QCPGraph类轻松地实现动态曲线图的绘制,该类提供了许多有用的方法和属性,可用于定义和控制图形的外观和行为。 要创建一个动态曲线图,首先要创建一个QCustomPlot对象,用于表示整个图表,并设置其外观和行为。然后,使用QCPGraph类创建一个或多个数据曲线,并将其添加到QCustomPlot对象中。接着,通过添加数据点或设置一个定时器,在动态环境下更新曲线数据,使它们动起来。 在QCustomPlot中实现动态曲线图的步骤如下: 1.创建一个QCustomPlot对象,设置其外观和行为。例如,可以设置背景颜色、坐标轴标签、坐标范围和网格线等属性。 2.创建一个或多个QCPGraph对象,并将其添加至QCustomPlot对象中。对于每个QCPGraph对象,可以设置线条颜色、粗细、线型和数据点圆圈等属性,以及曲线的名称和X、Y坐标数据。 3.在动态环境下更新曲线数据。可以使用addData()方法向曲线中添加数据点,或使用setData()方法设置所有的数据点。可以使用startTimer()方法启动一个定时器,定时更新曲线数据,或在用户操作期间实时更新数据。 4.根据需要,可以添加QCPItemText、QCPItemLine和QCPItemRect等其他元素,以丰富图表的内容。 综上所述,Qt QCustomPlot是一个功能强大的C++绘图库,它可以方便地创建各种各样的图表,包括动态曲线图。使用QCPGraph类和其他元素,可以轻松定义和控制图形的外观和行为,使其在动态的环境下呈现出最佳效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值