QT绘图用QCustomPlot库,简单画一个曲线图,涉及了QCustomPlot的最基础知识(画图必用到的属性)

QT想要使用QCustomPlot库绘图,需要先去官网下载QCustomPlot。

官网链接:https://www.qcustomplot.com/

下载成功后解压出来,解压成功后打开文件夹,会有以下文件

现在QCustomPlot库已经下载完成。要想在qt中使用,就需要添加qcustomplot.h和qcustomplot.cpp文件。

下面是QT引入QCustomPlot的操作,给大家分享两种方法。

方法一:

先新建一个项目,然后右击项目名,选择“添加现有文件...”

在弹出的文件框中选择你刚刚下载好的QCustomPlot文件夹中的qcustomplot.h和qcustomplot.cpp 文件。然后点击打开,QCustomPlot库就引入成功了。

 方法二:

是在项目的工程文件(.pro)中,使用include()方法进行导入.pri文件。而且只需要在.pro文件中添加一行下面的代码就可以导入。

# 导入QCustomPlot模块
include($$PWD/../../../../QCustomPlot/QCustomPlot.pri)
// 注意
// $$PWD表示的意思就是pro文件所在的目录。
// ../../../../QCustomPlot/QCustomPlot.pri 表示一级一级向上找到你下载的QCustomPlot文件夹中的QCustomPlot.pri的文件
// 如果你没有成功引入QCustomPlot库,可能是你这里的 ../ 多了或者少了,可以尝试添加/删除后再试试是否引入成功

此方法需要注意的是 文件路径一定要保证正确!!! 

在你的项目中出现QCustomPlot这个文件夹,说明导入成功。

接下来就可以使用QCustomPlot进行绘图了。

绘图第一步,是打开设计界面,并在工具栏中找到Widget控件,并拖到绘图区域。选中这个控件,鼠标右击,选择“提升为..”,在弹出的提示框中“提升的类名称”这一栏中输入 QCustomPlot ,然后点击“添加”和“提升”,提升后的这个控件就可以绘图啦,运行后会出现一个最简单的图。

再点击“添加“和”提升“。 

 

 提升成功后的界面为

 绘图第二步,在.h文件中引入QCustomPlot的头文件。

#include "qcustomplot.h"

 

 声明一个函数,用来画图

 绘图第三步,在函数中实现绘图。

void OneGraph::OneGraph_Drawing(QCustomPlot *customPlot)
{
    // 将数据用曲线实时显示
    QVector<double> x(101),y(101);// x轴数据,y轴数据

    for(int i = 0; i < 101;i++)
    {
        x[i] = i / 50.0 - 1;// x轴数据范围:-1 ~ 1
        y[i] = x[i] * x[i];// y轴数据范围:0 ~ 1
    }

    // 添加一个曲线图QGraph,
    customPlot->addGraph();
    customPlot->graph(0)->setData(x,y);//为坐标轴添加数据
    customPlot->graph(0)->setName("示例1:绘制一个曲线");// 设置曲线图的名字

    // 如果需要添加多个曲线,就需要多次调用addGraph()函数
//    customPlot->addGraph();
//    customPlot->graph(1)->setData("x轴数据","y轴数据");
//    customPlot->graph(1)->setName("示例1:绘制第二个一个曲线");

    // 设置图表标题
    QCPTextElement *title = new QCPTextElement(customPlot,"标题:绘制一个曲线",QFont("sans",10,QFont::Bold));
    title->setTextColor(Qt::green);
    title->setMargins(QMargins(0,6,0,10));
    // 在第一行第一列添加标题
    customPlot->plotLayout()->insertRow(0);// 插入一行
    customPlot->plotLayout()->addElement(0, 0, title);

    //为图例添加标题
    QCPTextElement *legend_title = new QCPTextElement(customPlot,"这是图例的标题",QFont("sans",10,QFont::Bold));
    legend_title->setTextColor(Qt::red);
    legend_title->setMargins(QMargins(0,6,0,10));// 为了效果更好,添加一些边距
    legend_title->setLayer("legend");// 一定要把标题的层设置为legend层
    customPlot->legend->insertRow(0);// 插入一行
    customPlot->legend->addElement(0,0,legend_title);// 在第一行第一列添加标题

    // x轴设置属性
    customPlot->xAxis->setLabel("x轴数据");// 设置x轴的标签
    customPlot->xAxis->setRange(-1,1);// 设置x轴的范围为(-1,1)
    customPlot->xAxis->setPadding(30);//设置外边距,数值可以改大或者改小来观察效果
    customPlot->xAxis->setLabelPadding(20);//设置标签内边距
    customPlot->xAxis->setTickLabelPadding(10);

    // y轴设置属性
    customPlot->yAxis->setLabel("y轴数据");
    customPlot->yAxis->setRange(-1,1);
    customPlot->yAxis->setPadding(10);

    //设置QCustomPlot的背景颜色
    QLinearGradient plotGradient;
    plotGradient.setStart(0,0);//背景颜色起始点,从图左上角开始,y方向0~400之间为红色渐变,开始位置为红色
    plotGradient.setFinalStop(0,400);//y方向 >400 为绿色渐变,结束位置为绿色
    plotGradient.setColorAt(0,QColor(200,200,200));//黑色,透明度从 0 ~ 1,
    plotGradient.setColorAt(1,QColor(120,120,120));
    customPlot->setBackground(plotGradient);

    //设置QCPAxisRect轴矩形的背景颜色
    QLinearGradient axisRectGradient;
    axisRectGradient.setStart(0,0);
    axisRectGradient.setFinalStop(0,350);
    axisRectGradient.setColorAt(0,QColor("#87CEFA"));//亮天蓝色
    axisRectGradient.setColorAt(1,QColor("#FFB6C1"));//浅粉红
    customPlot->axisRect()->setBackground(axisRectGradient);

    //设置QCPAxis轴的风格
    customPlot->xAxis->setBasePen(QPen(Qt::white,2));// x轴线的画笔颜色和粗细
    customPlot->xAxis->setTickPen(QPen(Qt::white,3));// x轴线上的主刻度线(有数字的刻度线)的画笔颜色和粗细
    customPlot->xAxis->setTickLabelColor(Qt::green);// x轴线上的主刻度线下的文字颜色
    customPlot->xAxis->setTickLengthIn(6);// 轴线内主刻度线的长度
    customPlot->xAxis->setTickLengthOut(15);// 轴线外主刻度线的长度
    customPlot->xAxis->setSubTickPen(QPen(QColor(220,20,60),1));//粉红色,x轴线上的子刻度线(有数字的刻度线)的画笔颜色和粗细
    customPlot->xAxis->setLabelColor(Qt::red);// 只有设置了标签,轴标签的颜色才会显示
    customPlot->xAxis->setUpperEnding(QCPLineEnding::esSpikeArrow);// 设置轴线结束时的风格为 实角三角形但内部有凹陷的形状
    customPlot->xAxis->setLowerEnding(QCPLineEnding::esDisc);//setLowerEnding设置轴线开始时的风格

    //设置QCPGrid网格的风格,每条网格对应一个刻度
    customPlot->xAxis->grid()->setPen(QPen(QColor(255,0,255),1,Qt::SolidLine));//实线
    customPlot->yAxis->grid()->setPen(QPen(QColor(255,0,255),2,Qt::DotLine));//点线
    customPlot->xAxis->grid()->setSubGridPen(QPen(QColor(80, 80, 80), 1, Qt::DotLine)); // 子网格线(对应子刻度)画笔
    customPlot->yAxis->grid()->setSubGridPen(QPen(QColor(80, 80, 80), 1, Qt::SolidLine));//设置颜色后,需要显示子网格线,才能看到效果
    customPlot->xAxis->grid()->setSubGridVisible(true);// 显示子网格线
    customPlot->yAxis->grid()->setSubGridVisible(true);
    customPlot->xAxis->grid()->setZeroLinePen(QPen(Qt::black,3));// 设置刻度为0时的网格线的画笔
    customPlot->yAxis->grid()->setZeroLinePen(QPen(Qt::black,3));

    customPlot->legend->setVisible(true);// 显示图例:曲线颜色和曲线名,一般在右上角,可以设置

//    customPlot->replot();重绘
}

 绘图第四步,在构造函数中调用绘图函数OneGraph_Drawing(QCustomPlot *customPlot)

    this->setWindowTitle("示例1:绘制一个曲线图");
//设计界面中将Widget类提升为QCustomPlot类,会显示出一个坐标图层
    OneGraph_Drawing(ui->QCP_oneGraph);
// QCP_oneGraph 就是你提升的Widget控件类的名字

绘图结束,运行看一下效果吧。

猜你喜欢

转载自blog.csdn.net/m0_49456900/article/details/125071836