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

时间:2022-11-14 17:38:01

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库生成静态、动态曲线详细教程图解

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

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

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

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

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

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

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

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

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

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

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

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

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

6.最后一步,编写代码:

头文件:

  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3.  
  4. #include <QWidget>
  5. #include "qcustomplot.h"
  6. namespace Ui {
  7. class Widget;
  8. }
  9.  
  10. class Widget : public QWidget
  11. {
  12. Q_OBJECT
  13.  
  14. public:
  15. explicit Widget(QWidget *parent = 0);
  16. ~Widget();
  17.  
  18. private:
  19. Ui::Widget *ui;
  20. };
  21.  
  22. #endif // WIDGET_H

cpp文件:

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <QVector>
  4. Widget::Widget(QWidget *parent) :
  5. QWidget(parent),
  6. ui(new Ui::Widget)
  7. {
  8. ui->setupUi(this);
  9. //设定背景为黑色
  10. //ui->widget->setBackground(QBrush(Qt::black));
  11. //设定右上角图形标注可见
  12. ui->widget->legend->setVisible(true);
  13. //设定右上角图形标注的字体
  14. ui->widget->legend->setFont(QFont("Helvetica", 9));
  15. QVector<double> x(101),y(101);
  16. //图形为y=x^3
  17. for(int i=0;i<101;i++)
  18. {
  19. x[i] = i/5.0-10;
  20. y[i] = x[i]*x[i]*x[i];//qPow(x[i],3)
  21. }
  22. //添加图形
  23. ui->widget->addGraph();
  24. //设置画笔
  25. ui->widget->graph(0)->setPen(QPen(Qt::blue));
  26. //设置画刷,曲线和X轴围成面积的颜色
  27. ui->widget->graph(0)->setBrush(QBrush(QColor(255,255,0)));
  28. //设置右上角图形标注名称
  29. ui->widget->graph(0)->setName("曲线");
  30. //传入数据,setData的两个参数类型为double
  31. ui->widget->graph(0)->setData(x,y);
  32.  
  33. QVector<double> temp(20);
  34. QVector<double> temp1(20);
  35. //图形为y = 100*x;
  36. for(int i=0;i<20;i++)
  37. {
  38. temp[i] = i;
  39. temp1[i] = 10*i+10;
  40. }
  41. //添加图形
  42. ui->widget->addGraph();
  43. //设置画笔
  44. ui->widget->graph(1)->setPen(QPen(Qt::red));
  45. //设置画刷,曲线和X轴围成面积的颜色
  46. //ui->widget->graph(1)->setBrush(QBrush(QColor(0,255,0)));
  47. //传入数据
  48. ui->widget->graph(1)->setData(temp,temp1);
  49.  
  50. /*-------------------------------------------*/
  51. //画动态曲线时,传入数据采用addData,通过定时器多次调用,并在之后调用ui->widget->replot();
  52. //动态曲线可以通过另一种设置坐标的方法解决坐标问题:
  53. //setRange ( double position, double size, Qt::AlignmentFlag alignment )
  54. //参数分别为:原点,偏移量,对其方式,有兴趣的读者可自行尝试,欢迎垂询
  55. /*-------------------------------------------*/
  56.  
  57. //设置右上角图形标注名称
  58. ui->widget->graph(1)->setName("直线");
  59. //设置X轴文字标注
  60. ui->widget->xAxis->setLabel("time");
  61. //设置Y轴文字标注
  62. ui->widget->yAxis->setLabel("temp/shidu");
  63. //设置X轴坐标范围
  64. ui->widget->xAxis->setRange(-20,20);
  65. //设置Y轴坐标范围
  66. ui->widget->yAxis->setRange(-1100,1100);
  67. //在坐标轴右侧和上方画线,和X/Y轴一起形成一个矩形
  68. ui->widget->axisRect()->setupFullAxesBox();
  69. }
  70.  
  71. Widget::~Widget()
  72. {
  73. delete ui;
  74. }

效果图如下:

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

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

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