QCustomPlot一、QCustomPlot基础及画图显示

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;
}

在这里插入图片描述

7、多个曲线、带状填充

  • 增加一个余弦曲线
  • 设置曲线间填充

增加多个曲线只需要在画布上调用addGraph方法,两个曲线设置方法完全一样,不过是通过graph序号来区分他们的属性设置。
为了显示坐标之间围成的区域,setChannelFillGraph(QCPGraph)将会被使用,将从调用曲线开始到指定曲线围成的面积

#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,ys,yc;for(double xi=-2*M_PI;xi<2*M_PI;xi+=0.1){x.push_back(xi);ys.push_back(sin(xi));yc.push_back(cos(xi));}QPen pen;  //用来绘制的画笔类,QT中的类,可以设置颜色,虚线等pen.setColor(Qt::red);  //设置画笔为红色this->ui->widget->addGraph(0);  //增加一条曲线,序号为0this->ui->widget->graph(0)->setData(x,ys);  //设置数据,用来绘制曲线this->ui->widget->graph(0)->setName("y=sin(x)");  //设置曲线名称this->ui->widget->graph(0)->setPen(pen); //使用QT的画笔进行绘图this->ui->widget->rescaleAxes(true);  //根据当前数据自动设置轴的范围,Qt自动设置轴的范围pen.setColor(Qt::blue);this->ui->widget->addGraph();  //新增一条曲线,自动增加一个序号this->ui->widget->graph(1)->setData(x,yc);  //序号1曲线设置数据,用来绘制曲线this->ui->widget->graph(1)->setName("y=cos(x)"); //设置曲线名称this->ui->widget->graph(1)->setPen(pen); //使用QT的画笔进行绘图this->ui->widget->rescaleAxes(true); //根据当前数据自动设置轴的范围,Qt自动设置轴的范围this->ui->widget->graph(0)->setBrush(QBrush(QColor(255,50,30,20)));  //使用QBrush给曲线之间填充颜色this->ui->widget->graph(0)->setChannelFillGraph( this->ui->widget->graph(1));  //设置为两条曲线之间this->ui->widget->xAxis->setLabel("X");  //设置轴的名称this->ui->widget->yAxis->setLabel("Y");  //设置轴的名称this->ui->widget->legend->setVisible(true);}MainWindow::~MainWindow()
{delete ui;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

夜晚兼职好选择:六大副业助你增收

晚上兼职&#xff0c;无疑是许多寻求额外收入人群的理想选择。以下为您精心推荐的六个副业&#xff0c;既适合晚间操作&#xff0c;又能让您在轻松愉悦中赚取额外收益。 网络调查与市场研究&#xff1a;利用晚上的闲暇时光&#xff0c;参与网络调查与市场研究&#xff0c;为企业…

TO-277肖特基二极管 散热效果好 型号齐全

市场对于肖特基二极管的需求非常旺盛&#xff0c;近日常有客户前来东沃电子咨询TO-277B 封装系列肖特基二极管选型、价格、交期、现货等方面的问题。东沃电子推出的TO-277B 封装系列肖特基产品&#xff0c;外形扁平&#xff0c;散热片外露设计&#xff0c;能够有效改善散热能力…

配置plsql链接Oracle数据库(新手)

配置plsql链接Oracle数据库 安装Oracle客户端 、安装plsql客户端并激活 配置tnsnames.ora文件&#xff08;路径D:\app\peter\Oracle\InstantClient\network\admin根据你的实际路径设置&#xff09; 配置文件如下 # tnsnames.ora Network Configuration File: D:\app\peter\O…

练习 16 Web [极客大挑战 2019]LoveSQL

extractvalue(1,concat(‘~’, (‘your sql’) ) )报错注入&#xff0c;注意爆破字段的时候表名有可能是table_name不是table_schema 有登录输入框 常规尝试一下 常规的万能密码&#xff0c;返回了一个“admin的密码”&#xff1a; Hello admin&#xff01; Your password is…

2024最新软件测试【测试理论+ app 测试】面试题(内附答案)

一、测试理论 3.1 你们原来项目的测试流程是怎么样的? 我们的测试流程主要有三个阶段&#xff1a;需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的 SE 会把需求文档给我们自己先去了解一到两天这样&#xff0c;之后我们会有一个需求澄清会议&#xff0c; …

JAVA基础02-Java语言基础以及编译准备工作

什么是JAVA语言 Java是一门面向对象的编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单易用的两个特征。 &#xff08;可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式…

DEM高程数字模型制作技术分享

1. 引言 ​数字高程模型&#xff08;Digital Elevation Model&#xff0c;简称DEM&#xff09;是地形表面地形特征的数字表示。它提供了关于地面起伏、地形形态、地表特征等重要信息。在地理信息系统&#xff08;GIS&#xff09;、遥感、地质学、水利工程等领域&#xff0c;DEM…

Golang数据库事务实践

事务是很多业务的基础&#xff0c;本文介绍了如何在Golang里实现数据库事务操作&#xff0c;并以一个用户注册场景给出了完整实现。原文: Transactions in Go application Go 是一种年轻而强大的语言&#xff0c;专为编写小型、简单的服务而创建。但随着时间推移&#xff0c;越…

redis数据类型介绍

字符串string&#xff1a; 字符串类型是Redis中最为基础的数据存储类型&#xff0c;是一个由字节组成的序列&#xff0c;他在Redis中是二进制安全的&#xff0c;这便意味着该类型可以接受任何格式的数据&#xff0c;如JPEG图像数据货Json对象描述信息等&#xff0c;是标准的key…

分享几个可以免费使用的GPT网站吧

1. ChatGAI ChatGAI是一个界面简洁的AI平台&#xff0c;提供App和网页版&#xff0c;每日均有免费使用机会。 2. ChatGPT 本网站向大家开放了ChatGPT 3.5和4.0版本的免费体验&#xff0c;特别适合新用户。每天都有免费次数&#xff0c;响应迅速&#xff0c;注册便捷&#xff0…

java中split(“.“)失效问题

来源&#xff1a;比较版本号_牛客题霸_牛客网 在写到这道算法题的时候&#xff0c;发现一个问题&#xff0c; String[] leftversion1.split("."); 返回结果为空&#xff0c;经过查阅得知&#xff0c;是split中的正则表达式里的问题&#xff0c;这个 . 代表的意思是…

深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度

看这篇前请先把我上一篇了解一下&#xff1a;深入理解数据结构第一弹——二叉树&#xff08;1&#xff09;——堆-CSDN博客 前言&#xff1a; 相信很多学习数据结构的人&#xff0c;都会遇到一种情况&#xff0c;就是明明最一开始学习就学习了时间复杂度&#xff0c;但是在后期…

12313124

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

【与C++的邂逅】---- 函数重载与引用

关注小庄 顿顿解馋(▿) 喜欢的小伙伴可以多多支持小庄的文章哦 &#x1f4d2; 数据结构 &#x1f4d2; C 引言 : 上一篇博客我们了解了C入门语法的一部分&#xff0c;今天我们来了解函数重载&#xff0c;引用的技术&#xff0c;请放心食用 ~ 文章目录 一. &#x1f3e0; 函数重…

【JavaWeb】Day31.SpringBootWeb请求响应——分层解耦(二)

3.IOC&DI 3.1 IOC&DI入门 完成Controller层、Service层、Dao层的代码解耦 思路&#xff1a; 1. 删除Controller层、Service层中new对象的代码 2. Service层及Dao层的实现类&#xff0c;交给IOC容器管理 3. 为Controller及Service注入运行时依赖的对象 Controller程序…

隐私计算实训营第六讲-隐语PIR介绍及开发实践

隐私计算实训营第六讲-隐语PIR介绍及开发实践 文章目录 隐私计算实训营第六讲-隐语PIR介绍及开发实践1.隐语实现PIR总体介绍1.1按服务器数量分类1.2按查询类型分类 2. Index PIR - SealPIR3. Keyword PIR - Labeled PSI4.隐语PIR功能分层5.隐语PIR后续计划PIR协议开发PIR调用框…

JavaScript 数组元素交互最优解

利用 ES6 解构赋值&#xff1a; let arr [1, 2, 3, 4, 5];// 交互下标 1,4 元素的值 [arr[1], arr[4]] [arr[4], arr[1]];// 输出&#xff1a; [1, 5, 3, 4, 2] console.log(arr);浏览器控制台效果&#xff1a;

Node.js-知识点学习总结归纳

Node.js-知识点学习总结归纳 安装nodenode运行方式通过Node.js直接运行js文件&#xff08;也就不用通过网页html了&#xff09;绝对路径调用:相对路径调用&#xff1a;直接运行js命令&#xff1a; Vscode控制台使用node运行js文件 安装node 这个就不用讲了吧&#xff0c;网上搜…

硬件知识:点亮led

怎么做 1、看原理图&#xff0c;去顶控制LED的引脚 1.1led 1.2gpio 1、使能gpio模块&#xff0c;设置Power/clock control,向gpio模块提供电源和时钟 2.设置引脚模式为gpio模式 3.设置方向output/input4、读取引脚&#xff0c;获得当前电频到底是低电平/高电平&#xff1b;这…

数据库:Redis数据库

一、非关系型数据库 1.什么是非关系型数据库 非关系型数据库&#xff08;Non-relational Database&#xff09;又称NoSQL数据库是一种不同于传统关系型数据库管理系统&#xff08;RDBMS&#xff09;的数据存储解决方案。NoSQL这个术语最初意味着"Not Only SQL"&…