1、QCustomPlot下载
QCustomPlot源码demo
根据需要选择需要的文件:
完整版。QCustomPlot.tar.gz 源代码+例子+帮助文档;
共享库。QCustomPlot-sharedlib.tar.gz 库编译和使用;
源代码。QCustomPlot-source.tar.gz 源代码
里面包含了很多QCustomplot的demo
2、创建项目并添加QCustomPlot相关文件
1、创建了一个空的工程
2、将cpp和h文件添加进工程
3、编译报错解决
使用的是QT5,需要加上printsupport模块,方法是:QT +=printsupport
这样就编译完成了
4、ui文件增加QWidget并提升成QCustomPlot
添加QWidget
将QWideget提升为QCustomPlot
提升完成后,就可以进行画图了
3、QCustomPlot画图
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <cmath>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QVector<double> x,y;//创建QVector,保存x和y的值
//设置x和y的值
for(double xi=-2*M_PI;xi<2*M_PI;xi+=0.1)
{
x.push_back(xi);
y.push_back(sin(xi));
}
this->ui->widget->addGraph(0); //新建一条曲线
this->ui->widget->graph(0)->setData(x,y);//绘制曲线
}
MainWindow::~MainWindow()
{
delete ui;
}
这样一个图就画出来了
4、QCustomPlot
1、QCPGraph曲线,上面的曲线就是QCPGraph
QCPGraph表示一个曲线,常见的方法有:
- QCustomPlot::addGraph 增加一个曲线(一个曲线就需要手动addGraph);
- QCustomPlot::graph 获得曲线实例;
- setData/addData 设置/增加曲线数据;
- setName 设置曲线名称,会在Legend显示的时候用到;
- rescaleAxes 根据当前数据调整轴范围;
- data 返回一个指向曲线数据的指针,可用于直接修改数据;
2、QCPAxisRect (矩形)轴
表示轴系统上的所有设置,如刻度,范围等。
QCustomPlot默认构造了四个轴,分别位于
- 上(QCustomPlot::xAxis2)
- 下(QCustomPlot::xAxis)
- 左(QCustomPlot::yAxis)
- 右(QCustomPlot::yAxis2)
四个方位,默认显示左下两个轴,左(QCustomPlot::yAxis),下(QCustomPlot::xAxis)。
设置轴上的表现:
3、QCPLegend 图线
QCustomPlot默认有成员QCustomPlot::legend实例(调用setVisible(true)显示),一般不需要自己构造QCPLengend,通过这个类你可以控制曲线说明的大小、颜色等属性
5、改进画图,显示坐标轴名称,设置轴的范围,显示曲线名称
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <cmath>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QVector<double> x,y; //创建QVector,用来保存x轴和y轴的值
//设置保存x轴和y轴的值
for(double xi=-2*M_PI;xi<2*M_PI;xi+=0.1)
{
x.push_back(xi);
y.push_back(sin(xi));
}
this->ui->widget->addGraph(0); //新增一个曲线
this->ui->widget->graph(0)->setData(x,y);//设置曲线的值,绘制曲线
this->ui->widget->graph(0)->setName("y=sin(x)");//设置曲线名称
this->ui->widget->rescaleAxes(true); //根据当前数据自动设置轴的范围
this->ui->widget->xAxis->setLabel("X下"); //设置轴的名称
this->ui->widget->yAxis->setLabel("Y左"); //设置轴的名称
this->ui->widget->xAxis2->setLabel("X上"); //设置轴的名称,默认不显示
this->ui->widget->yAxis2->setLabel("Y右"); //设置轴的名称,默认不显示
this->ui->widget->legend->setVisible(true);
}
MainWindow::~MainWindow()
{
delete ui;
}
QCustomPlot本身可以设置交互行为,如放大,缩小移动,选择曲线交互,方法是:customPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);
6、改变曲线的颜色、线宽和线型并在曲线与坐标轴之间增加填充颜色
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <cmath>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QVector<double> x,y; //创建QVector,用来保存x轴和y轴的值
//设置保存x轴和y轴的值
for(double xi=-2*M_PI;xi<2*M_PI;xi+=0.1)
{
x.push_back(xi);
y.push_back(sin(xi));
}
this->ui->widget->addGraph(0); //新增一个曲线
this->ui->widget->graph(0)->setData(x,y);//设置曲线的值,绘制曲线
this->ui->widget->graph(0)->setName("y=sin(x)");//设置曲线名称
this->ui->widget->rescaleAxes(true); //根据当前数据自动设置轴的范围
this->ui->widget->xAxis->setLabel("X下"); //设置轴的名称
this->ui->widget->yAxis->setLabel("Y左"); //设置轴的名称
this->ui->widget->xAxis2->setLabel("X上"); //设置轴的名称,默认不显示
this->ui->widget->yAxis2->setLabel("Y右"); //设置轴的名称,默认不显示
this->ui->widget->legend->setVisible(true);
//增加部分
QPen pen;
pen.setColor(Qt::red); //设置曲线颜色为红色
pen.setStyle(Qt::DotLine);//设置曲线为虚线
pen.setWidth(3);//设置线宽
this->ui->widget->graph(0)->setPen(pen); //设置曲线使用QPen绘制
this->ui->widget->graph(0)->setBrush(QBrush(QColor(255,50,30,20)));//QBrush曲线之间填充颜色
}
MainWindow::~MainWindow()
{
delete ui;
}