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开发知识请查看下面的相关链接

(0)

相关推荐

  • Qt自定义表头实现过滤功能的方法

    1. 写在前面 过滤功能源自项目上交互优化用户体验,在表头添加过滤符号实现过滤,替换以往在表格上方占用一行过滤项进行过滤. 2. 过滤提示 过滤提示就是三态图标(normal,hover,press).这三种状态的实现通过鼠标移动事件和鼠标点击事件来实现.具体实现如下:   1)hover状态在鼠标移动事件中实现 void CFilterHeaderView::mouseMoveEvent(QMouseEvent *e) { m_hover = logicalIndexAt(e->pos());

  • Qt股票组件之自选股列表拖拽、右键常用菜单功能的实现

    一.开头嘴一嘴 本文带领大家来看看自选股列表的实现. 如果有需要的朋友可以加我好友,有偿提供源码.或者也可以进一步提供功能定制 封装的控件,或者demo都是没有样式的,所以看着会比较丑一些,不过加样式也是分分钟...这里咱可以先看功能,需要即可定制 本篇文章的自选股和大多数炒股软件一样,每一条自选都是支持拖拽的,拖拽时鼠标会跟随一个拖拽映像,并且鼠标移动时,会有拖拽提示,告知我们鼠标释放时拖拽项将会被插入到哪个位置.除过拖拽之外,自选股列表还支持右键菜单,都是一样常用的操作. 右键菜单包括置顶.

  • Qt实现保存、浏览、预览、打印功能的示例代码

    Qt提供了以文本.图片.HTML等方式来实现对文档的操作,主要用到了QPrinter类和QPainter类,用到了QFileDialog文件窗口.QPrintPreviewDialog预览窗口类和QPrintDialog打印窗口类,Qt5也提供了QPdfWriter类来实现对pdf的操作,这里并不包括打开pdf文件,Qt没有提供任何方法来直接像文件浏览器一样打开pdf文件,可以用第三方库来实现. 这里采用了图片的方式来实现保存.预览和打印,其实 三个功能基本上一样. 1.保存PDF (1)保存某

  • Qt实现闹钟小程序

    本文实例为大家分享了Qt之闹钟小程序的具体代码,供大家参考,具体内容如下 -首先 首先我们利用Qt的designer 设计好我们需要的闹钟界面,设计界面如下图: 其次我们来分别利用信号分别完成他们各自的槽函数 在mainwindow.h中,我们定义了下面这些私有成员变量,如下: / mainwindow.h文件/** #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QTimeEdit&g

  • 如何为Qt视图中的文字实现彩虹渐变效果

    前言 将view中的文本内容用自定义的颜色显示是一种十分常见的需求.今天我们稍微改变些"花样".下面话不多说了,来一起看看详细的介绍吧 需求定义 我们的需求很简单,现在有一些在view中的text内容需要使用彩色显示,而且不使用单一的一种颜色,而是多种颜色渐变实现的彩虹效果. 文字描述可能比较抽象,所以我们先给出预想的效果图: 现在让我们想办法实现图中的效果. 需求分析 好在Qt的Model/View机制对于用户自定义的外观控制提供了极为丰富的支持,因此我们可以轻松地实现许多独特的显示

  • Qt学习笔记之QPalette调色板类

    QPalette通过获取控件或窗口的调色板对象(palette)对该控件或窗口进行色彩设置 可设置该widget不同状态的色彩(ColorGroup): QPalette::Active      获得焦点的状态下 QPalette::inactive   未获得焦点的状态下 QPalette::Disable    不可用的状态下 设置不同部位的颜色(ColorRole): QPalette::Window     对窗体的背景颜色进行设置 QPalette::WindowText     对

  • Qt图形图像开发之高性能曲线图模块QCustomplot库详细使用方法与实例(支持动、静曲线图)

    Qt曲线图模块QCustomPlot库介绍 QCustomPlot是一个小型的Qt画图标类,支持绘制静态曲线.动态曲线.多重坐标曲线,柱状图,蜡烛图等 前段时间用QChart模块画图,一条曲线上面放8000条数据就会卡的不行必须要换个其他的控件,后来找到了曲线图模块QCustomplot库 这个库性能非常好,画曲线图折线图柱状图动态静态,放大缩小,都很好用,10w条数据量无压力秒画出来一点也不卡 下载地址 https://www.qcustomplot.com/index.php/downloa

  • Qt学习教程之表格控件蚂蚁线详解

    一.蚂蚁线 摘自互动百科:在图像影像软件中表示选区的动态虚线,因为虚线闪烁的样子像是一群蚂蚁在跑,所以俗称蚂蚁线.在Poshop,After Effect等软件中比较常见. 背景:用过excel的同学都知道,当对单元格进行复制时,单元格周围就会出现一个跑动的矩形框,这个矩形框就被称为蚂蚁线.通过设置蚂蚁线的线型和调整控件有效刷新次数我们可以得到不同的跑动效果,这是一个非常有意思的现象. 本文将给大家详细介绍关于Qt表格控件蚂蚁线的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的

  • Qt学习教程之对话框消失动画效果

    一.效果展示 最近做了一个提示框消失的功能,觉着挺有意思,以前一直以为Qt子窗口不能做淡出效果,其实Qt的淡出功能已经帮我们封装好了,我们仅仅只需要几行代码就可以做出酷炫的窗口关闭效果,写此篇文章的时候,我特意浏览了下之前写的两篇文章(QPainterPath 不规则提示框,QPainterPath 不规则提示框(二)),现在回想起来那会儿确实知之甚少,关于顶层窗口不能做圆角,其实帮助文档里已经说的很明确,解决办法有多种,一种是重写paintEvent函数,另一种是把widget包装一层,本篇文

  • Qt 使用Poppler实现pdf阅读器的示例代码

    开发环境 Qt5.5.1.Qt Creator 3.5.1 Qt实现pdf阅读器和MFC实现pdf阅读器,其实原理都是差不多的. 需要用到Poppler开源库,下载地址如下 https://poppler.freedesktop.org/ 如果只是要在window的gcc下运行的话,可以下载已经编译好的库 https://sourceforge.net/projects/poppler-win32/ 注意:这个是MinGW版本的Qt,也就是运行在GCC环境下的库,里面只包含 *.dll 和 *.

随机推荐