Qt图形图像开发之曲线图模块QCustomplot库生成静态、动态曲线详细教程图解

 更新时间:2020年03月10日 16:29:37   作者:52_赫兹的鲸  
这篇文章主要介绍了Qt图形图像开发之曲线图模块QCustomplot库画静态、动态曲线详细教程图解,需要的朋友可以参考下

Qt曲线图模块QCustomPlot库介绍

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

QCustomPlot官网:

  http://www.qcustomplot.com/

QCustomPlot下载地址:

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

QCustomPlot帮助文件

QCustomPlot源码包中,有QCustomPlot帮助文件,将其添加进Qt帮助文件,如图,点击添加按钮,在下载的QCustomPlot源码包中找到qch为后缀的文件进行添加。

Qt曲线图模块QCustomPlot库简单例子详解

1.建立Qt工程,将下载的QCustomPlot源码中的qcustomplot.h和qcustomplot.cpp文件复制到项目所在文件夹,如图

2.QtCreater中,右键项目,添加现有文件,如图,选择qcustomplot.h和qcustomplot.cpp添加:

3.在UI界面拖入一个widget,如图

4.UI界面右键widget,点击提升为,选择全局包含,如图

这里强调一下:Qt提升控件时,通常提升的类名称中,每个单词的首字母必须大写【与Qt控件命名规则保持一致,各种第三方控件都采用这种命名格式】,否则无法识别,如这里必须写成QCustomPlot而不能写成Qcustomplot或qcustomplot

另一种简单方法是将被提升类的名称直接复制过来粘贴。

5.选择项目的.pro文件,添加printsupport,如图,QCustomPlot包含了一些打印的东西,如果没有这一步,程序会报错

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); 
    //设定背景为黑色
    //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;
}

效果图如下:

本文主要讲解了Qt曲线图模块QCustomplot库生成静态、动态曲线详细教程图解,更多关于Qt开发知识请查看下面的相关链接

相关文章

  • C语言统计输入字符各个字母出现频率的解题思路

    C语言统计输入字符各个字母出现频率的解题思路

    这篇文章主要介绍了C语言统计输入字符各个字母出现频率的解题思路,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • 一文详解Qt的QObject类

    一文详解Qt的QObject类

    Qt的QObject类是Qt框架中的基类,它是所有Qt对象的父类,本文主要介绍了Qt的QObject类,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • C++实现LeetCode(45.跳跃游戏之二)

    C++实现LeetCode(45.跳跃游戏之二)

    这篇文章主要介绍了C++实现LeetCode(45.跳跃游戏之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++实现万年历小功能

    C++实现万年历小功能

    这篇文章主要为大家详细介绍了C++实现万年历小功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 深入分析父子线程、进程终止顺序不同产生的结果

    深入分析父子线程、进程终止顺序不同产生的结果

    本篇文章是对父子线程、进程终止顺序不同产生的结果进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 基于QT设计一个春联自动生成器

    基于QT设计一个春联自动生成器

    春节是中国最隆重的传统节日,一到过年家家户户肯定是要贴春联;在春节前夕,会用大红纸张,加上浓墨书写祝福词语。本文将利用Qt框架设计一个春联自动生成器,需要的可以参考一下
    2022-01-01
  • C语言实例实现二叉搜索树详解

    C语言实例实现二叉搜索树详解

    二叉搜索树是以一棵二叉树来组织的。每个节点是一个对象,包含的属性有left,right,p和key,其中,left指向该节点的左孩子,right指向该节点的右孩子,p指向该节点的父节点,key是它的值
    2022-05-05
  • 人脸检测中AdaBoost算法详解

    人脸检测中AdaBoost算法详解

    这篇文章主要为大家详细介绍了人脸检测中AdaBoost算法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C语言中实现“17进制”转“10进制”实例代码

    C语言中实现“17进制”转“10进制”实例代码

    这篇文章主要介绍了C语言中实现“17进制”转“10进制”实例代码的相关资料,需要的朋友可以参考下
    2017-05-05
  • C++实现LeetCode(80.有序数组中去除重复项之二)

    C++实现LeetCode(80.有序数组中去除重复项之二)

    这篇文章主要介绍了C++实现LeetCode(80.有序数组中去除重复项之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论