欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

QT QcustomPlot的简单使用

程序员文章站 2023-11-19 19:31:34
第一步、QcustomPlot是QT提供的一个第三方库,在使用前需要在QcustomPlot官网上进行下载。 第二步、把解压完的QcustomPlot压缩包中的qcustomplot.h和qcustomplot.cpp文件添加到工程文件中来。使用时应先在源文件处点击添加现有文件,把这两个文件添加进来 ......

第一步、qcustomplot是qt提供的一个第三方库,在使用前需要在qcustomplot官网上进行下载。

第二步、把解压完的qcustomplot压缩包中的qcustomplot.h和qcustomplot.cpp文件添加到工程文件中来。使用时应先在源文件处点击添加现有文件,把这两个文件添加进来。

QT QcustomPlot的简单使用

 

QT QcustomPlot的简单使用

 

第三步、打开ui界面,把weiget控件添加到界面里,然后右键点击控件,选择提升

QT QcustomPlot的简单使用

在提升的类名上写qcustomplot,最后点击提升即可。

这样qcustomplot这个第三方库就可以使用了。

以下是一简单的曲线代码。

.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qtime>
#include <qdebug>

mainwindow::mainwindow(qwidget *parent) :
    qmainwindow(parent),
    ui(new ui::mainwindow)
{
    ui->setupui(this);
    //设置鼠标点击精度
    ui->customplot->setselectiontolerance(1);

    for(int i=0;i<20;i++)
    {
        num[i]=0;
    }
    n=0;
    qtimer *t = new qtimer(this);
    t->start(500);
    connect(t,signal(timeout()),this,slot(graph_show()));
    connect(ui->customplot,signal(mouserelease(qmouseevent*)),this,slot(mousereleaseevent(qmouseevent*)));
    //connect(tracer,signal(mousemove(qmouseevent*)),this,slot(mousemoveevent(qmouseevent*)));

}

mainwindow::~mainwindow()
{
    delete ui;
}

void mainwindow::graph_show()
{
    n += pi/8;
    graph_show(ui->customplot);
}


void mainwindow::graph_show(qcustomplot *customplot)
{

    qvector<double> x(20),y(20);
    for(int i=0;i<19;i++)
    {
        num[i]=num[i+1];
    }
    num[19]=n;
    for(int i=0;i<20;i++)
    {
        x[i] = i;
        y[i] = sin(num[i]);
    }
    //添加一条曲线
    customplot->addgraph();
    //设置曲线的颜色
    customplot->graph(0)->setpen(qpen(qt::red));
    //给曲线传递两个参数
    customplot->graph(0)->setdata(x,y);
    //给曲线的横纵坐标命名
    customplot->xaxis->setlabel("x");
    customplot->yaxis->setlabel("y");
    //设置横纵坐标的范围
    customplot->xaxis->setrange(0,20);
    customplot->yaxis->setrange(-3,3);
    //进行曲线重画
    customplot->replot();
    /*
    customplot->setinteraction(qcp::irangezoom,true);
    customplot->axisrect()->setrangedrag(qt::vertical);
    customplot->setinteraction(qcp::irangedrag,true);
    */
}

void mainwindow::mousereleaseevent(qmouseevent *e)
{
    //排除非左鼠标键
    if (e->button() != qt::leftbutton)
    {
        return;
    }

    //获取点击的点坐标
    qpointf chickedpoint = e->pos();
    //排除区间外鼠标点
    if(!ui->customplot->viewport().contains(e->pos()))
    {
        return;
    }
    //将像素坐标转换为轴值
    double currentx = ui->customplot->xaxis->pixeltocoord(chickedpoint.x());
    double currenty = ui->customplot->yaxis->pixeltocoord(chickedpoint.y());
    //使用qtooltip输出值,
    qtooltip::showtext(maptoglobal(e->pos()),qstring("当前点值为:x=%1,y=%2").arg(currentx).arg(currenty),this);
}

.h文件

#ifndef mainwindow_h
#define mainwindow_h

#include <qmainwindow>
#include "ui_mainwindow.h"
#include <qmouseevent>

#define pi 3.1415926

namespace ui {
class mainwindow;
}

class mainwindow : public qmainwindow
{
    q_object

public:
    explicit mainwindow(qwidget *parent = 0);
    ~mainwindow();
    //设置一容器
    double num[20];
    double n=0;
    void graph_show(qcustomplot *customplot);

public slots:
    void graph_show();
    void mousereleaseevent(qmouseevent *e);
//     void mousemoveevent(qmouseevent *e);

private:
    ui::mainwindow *ui;
};

#endif // mainwindow_h

静态曲线的命名方法可以选用:

    customplot->legend->setvisible(true);
    customplot->graph(0)->setname("sin");

此处是对第一条曲线进行命名为“sin“。