zoukankan      html  css  js  c++  java
  • Qt第三方库----QCustomPlot

    一、软件下载

    下载地址:http://www.qcustomplot.com/index.php/download

    这里推荐下载第一个链接的内容:

    注:这里的第三方库要放在非中文目录下。

     

    二、配置

    (1)、新建工程,并且添加头文件qcustomplot.h和源文件qcustomplot.cpp。

    (2)、在工程pro文件末尾添加printsupport:

    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport

    (3)、进入图形设计界面,添加widget控件,对着所添加的widget区域点击右键,选择“提升为”按钮,提升类名称输入“QCustomPlot”,点击添加。

    (4)、运行程序,如下所示:

    至此,QCustomPlot已经配置完毕。

    注:默认情况下是x:0~4.8,y:0~4.8。

     

    三、绘图

    原理:

    QCustomPlot是一个绘图板的类,它继承于Widget,界面中的Widget类提升为QCustomPlot才能够绘图。

    QCustomPlot中的每一个曲线是一个Graph对象,凡是跟显示数据有关的就对Graph进行操作或调用Graph对象提供的方法。

    一个QCustomPlot里有四个坐标轴,其中xAxis和yAxis就是我们上图看到的x和y坐标轴,还有两个坐标轴xAxis1和yAxis1为上方和右方的x、y坐标,默认隐藏,可以通过程序设计显示。

    步骤:

    (1)、首先将上面提升为QCustomPlot类的容器界面的对象widget重命名为qCustomPlot。

    (2)、在主类Widget构造函数中添加如下代码,即可绘制一个标准标准的y=x^3的曲线。

    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
    
        //定义两个可变数组存放绘图的坐标数据
        QVector<double> x(101),y(101);//分别存放x和y坐标的数据,101为数据长度
        //添加数据,我们这里演示y=x^3,为了正负对称,我们x从-10到+10
        for(int i=0;i<101;i++)
        {
            x[i] = i/5 - 10;
            y[i] = x[i] * x[i] * x[i];
        }
    
        //向绘图区域QCustomPlot(从widget提升来的)添加一条曲线
        ui->qCustomPlot->addGraph();
        //添加数据
        ui->qCustomPlot->graph(0)->setData(x,y);
    
        //设置坐标轴标签名称
        ui->qCustomPlot->xAxis->setLabel("x");
        ui->qCustomPlot->yAxis->setLabel("y");
    
        //设置坐标轴显示范围,否则我们只能看到默认的范围
        ui->qCustomPlot->xAxis->setRange(-11,11);
        ui->qCustomPlot->yAxis->setRange(-1100,1100);
        
        //重绘,这里可以不用,官方例子有,执行setData函数后自动重绘
        //我认为应该用于动态显示或者是改变坐标轴范围之后的动态显示,我们以后探索
        //ui->qCustomPlot->replot();
    
    }

    图形如下所示:

    说明:如果设置完x、y取值范围之后,显示结果仍然为默认范围(即x:0~4.8,y:0~4.8),那么原因在于没有把设置代码放在构造函数中(也就是说构造函数调用的仍然是默认的配置),只需要将初始化代码放在构造函数中即可。

  • 相关阅读:
    ubuntu安装sublime无工具栏解决办法
    ubuntu安装eclipse无工具栏解决办法
    数据库设计
    cglib代理
    多线程简单实例(3)线程池
    多线程简单实例(2)生产者和消费者
    STL之迭代器(iterator)
    STL之vector
    “由于这台计算机没有终端服务器客户端访问许可证”解决方案
    STL之容器(containers) 简介
  • 原文地址:https://www.cnblogs.com/yedushusheng/p/5520025.html
Copyright © 2011-2022 走看看