QCustomPlot的了解

(一)QCustomPlot常见属性设置、多曲线绘制、动态曲线绘制、生成游标、矩形放大等功能实现-CSDN博客

关键代码:

QT       += core gui printsupport

使用上面文章中的代码跑起来的程序效果图:

我的学习过程: 

最开始初始化后:QCustomPlot对象显示图:

1.x轴名称和刻度值

    m_Multichannel->xAxis->setLabel("x轴");
    m_Multichannel->xAxis->setNumberFormat("f");                      //x轴刻度值格式

2. 刻度值精度

m_Multichannel->xAxis->setNumberPrecision(3);                     //刻度值精度

 

3. x轴标签的字体

m_Multichannel->xAxis->setLabelFont(QFont(font().family(),20));    //设置标签字体大小

4. x轴刻度数量和刻度范围

m_Multichannel->xAxis->ticker()->setTickCount(11);                //刻度数量
m_Multichannel->xAxis->setRange(0,10,Qt::AlignLeft);              //范围
0---9
其实一共11个刻度
0,1,2,3,4
5,6,7,8,9
10

 

5. x轴刻度范围

m_Multichannel->xAxis->setRange(0,20,Qt::AlignLeft);              //范围
0---20
11个刻度

6. x轴刻度范围

m_Multichannel->xAxis->setRange(0,30,Qt::AlignLeft);    

0---30

11个刻度

 

7. x轴属性集合

    m_Multichannel->xAxis->ticker()->setTickCount(21);                //刻度数量m_Multichannel->xAxis->setNumberFormat("f");                      //x轴刻度值格式m_Multichannel->xAxis->setNumberPrecision(0);                     //刻度值精度m_Multichannel->xAxis->setRange(0,30,Qt::AlignLeft);              //范围0---3021个刻度

不知道为什么,显示出来是这样:

8. x轴子刻度长度

m_Multichannel->xAxis->setSubTickLength(0,0);                     //子刻度长度
  setSubTickLength(int inside, int outside)Sets the length of the subticks in pixels. \a inside is the length the subticks will reach insidethe plot and \a outside is the length they will reach outside the plot. If \a outside is greaterthan zero, the tick labels and axis label will increase their distance to the axis accordingly,so they won't collide with the ticks.

 以像素为单位设置子刻度的长度。

inside是子刻度将到达的图表内的长度
outside是它们到达plot外的长度。

如果outside>0,刻度label和轴label将相应地增加到轴的距离,
这样它们就不会和ticks相撞。

plot:图表

 

9.  x轴子刻度长度

m_Multichannel->xAxis->setSubTickLength(5,0);                     //子刻度长度

10.  x轴子刻度长度

m_Multichannel->xAxis->setSubTickLength(20,0);                     //子刻度长度

11.  x轴子刻度长度

m_Multichannel->xAxis->setSubTickLength(0,20);                     //子刻度长度

12.  x轴子刻度长度

m_Multichannel->xAxis->setSubTickLength(10,10);                     //子刻度长度

13. x轴和y轴

    m_Multichannel=ui->widget;QSharedPointer<QCPAxisTickerFixed> intTicker_M(new QCPAxisTickerFixed);intTicker_M->setTickStep(1);intTicker_M->setScaleStrategy(QCPAxisTickerFixed::ssMultiples);m_Multichannel->xAxis->setTicker(intTicker_M);m_Multichannel->xAxis->setLabel("x轴");m_Multichannel->xAxis->ticker()->setTickCount(11);                //刻度数量m_Multichannel->xAxis->setNumberFormat("f");                      //x轴刻度值格式m_Multichannel->xAxis->setNumberPrecision(0);                     //刻度值精度m_Multichannel->xAxis->setLabelFont(QFont(font().family(),20));    //设置标签字体大小m_Multichannel->xAxis->setRange(0,10,Qt::AlignLeft);              //范围m_Multichannel->xAxis->setSubTickLength(0,0);                     //子刻度长度m_Multichannel->yAxis->setNumberFormat("f");m_Multichannel->yAxis->setNumberPrecision(2);m_Multichannel->yAxis->setLabel("y轴");m_Multichannel->yAxis->setLabelFont(QFont(font().family(),10));m_Multichannel->yAxis->setRange(0,5);m_Multichannel->yAxis->setTickLength(10,5);

14. 背景

QCustomPlot绘图类详解(大白话)-CSDN博客

ui->plotWidget->setBackground(QBrush(QColor("#404040")));

15. 坐标轴标签颜色

       ui->plotWidget->xAxis->setLabelColor(QColor(Qt::red));ui->plotWidget->yAxis->setLabelColor(QColor(Qt::red));

16. 坐标轴数字标签颜色

       ui->plotWidget->xAxis->setTickLabelColor(QColor(Qt::green));ui->plotWidget->yAxis->setTickLabelColor(QColor(Qt::green));

17. 坐标轴基线颜色

       ui->plotWidget->xAxis->setBasePen(QPen(QColor(Qt::yellow), 2, Qt::SolidLine));ui->plotWidget->yAxis->setBasePen(QPen(QColor(Qt::yellow), 2, Qt::SolidLine));

18. 坐标轴tick颜色

       ui->plotWidget->xAxis->setTickPen(QPen(QColor("#ff00ff")));ui->plotWidget->yAxis->setTickPen(QPen(QColor("#ff00ff")));

19. 坐标轴subtick颜色

       ui->plotWidget->xAxis->setSubTickPen(QPen(QColor("#00ffff")));ui->plotWidget->yAxis->setSubTickPen(QPen(QColor("#00ffff")));

20. grid()颜色

       ui->plotWidget->xAxis->grid()->setPen(QPen(QColor(Qt::darkRed), 1, Qt::DotLine));ui->plotWidget->yAxis->grid()->setPen(QPen(QColor(Qt::darkGreen), 1, Qt::DotLine));

21. 示例1

       #define PT_CNT       200    // 点数QVector<double> keys, values;for (int i = 1; i <= PT_CNT; i++){keys.push_back(i);values.push_back(rand() % 100 - 10);}ui->plotWidget->addGraph();ui->plotWidget->graph(0)->addData(keys, values);ui->plotWidget->graph(0)->setPen(QColor(Qt::blue));ui->plotWidget->graph(0)->setAntialiasedFill(true);ui->plotWidget->replot();

22. 刷新图层

    ui->plotWidget->graph(0)->data()->clear();ui->plotWidget->replot();

重新添加数据:

    QVector<double> keys, values;for (int i = 1; i <= PT_CNT; i++){keys.push_back(i);values.push_back(rand() % 100 - 10);}ui->plotWidget->graph(0)->addData(keys, values);ui->plotWidget->graph(0)->setPen(QColor(Qt::blue));ui->plotWidget->graph(0)->setAntialiasedFill(true);ui->plotWidget->replot();

23. 拖拽+缩放

ui->plotWidget->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);

24. qcustomplot的帮助文档

我希望在QtCreator中使用qcustomplot的帮助文档,可以参考下面的文章。

QCustomPlot使用手册(一)_qcustom手册-CSDN博客

【QCustomPlot】1.1 - Qt .qch帮助文档导入使用-CSDN博客

25.示例2

参考:QCustomPlot使用-CSDN博客

      //最开始初始化 for (int i=0; i<101; ++i){double m,m1;m= i/50.0 - 1;m1 = m*m;x<<m;x1<<m;y<<m1;y1<<-m1;}one=ui->plotWidget->addGraph();init_graph(0);two=ui->plotWidget->addGraph();ui->plotWidget->graph(1)->addData(x1, y1);ui->plotWidget->graph(1)->setPen(QColor(Qt::red));ui->plotWidget->graph(1)->setAntialiasedFill(true);ui->plotWidget->replot();init_graph(1);
//初始化图层
void MainWindow::init_graph(int current_index)
{if(current_index==0){ui->plotWidget->graph(current_index)->addData(x, y);ui->plotWidget->graph(current_index)->setPen(QColor(Qt::blue));}else {ui->plotWidget->graph(current_index)->addData(x1, y1);ui->plotWidget->graph(current_index)->setPen(QColor(Qt::red));}ui->plotWidget->graph(current_index)->setAntialiasedFill(true);ui->plotWidget->replot();
}//清理图层
void MainWindow::on_pushButton_clicked()
{int current_index=ui->spinBox->value();ui->plotWidget->graph(current_index)->data()->clear();ui->plotWidget->replot();
}
//添加数据
void MainWindow::on_pushButton_2_clicked()
{int current_index=ui->spinBox->value();init_graph(current_index);
}

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

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

相关文章

家用充电桩远程监控安全管理系统解决方案

家用充电桩远程监控安全管理系统解决方案 在当今电动汽车日益普及的背景下&#xff0c;家用充电桩的安全管理成为了广大车主关注的重点问题。为了实现对充电桩的高效、精准、远程监控&#xff0c;一套完善的家用充电桩远程监控安全管理系统解决方案应运而生。本方案旨在通过先…

如何去除字符串两侧的空白字符?

TRIM函数会去掉字符串左侧和右侧的空格&#xff0c;语法是&#xff1a;TRIM(字符串) excel中&#xff0c;TRIM函数能去掉字符串左侧和右侧的空格&#xff0c;它的ASCII码是32。 以下设定一个字符串组合&#xff0c;它的第一个字符中空格&#xff0c;最后一个字符是换行符 &q…

【Linux进程通信 —— 管道】

Linux进程通信 —— 管道 进程间通信介绍进程间通信的概念进程间通信的目的进程间通信的本质进程间通信的分类 管道什么是管道匿名管道匿名管道的原理pipe用fork来共享管道原理站在文件描述符角度-深度理解管道站在内核角度-管道本质管道读写规则管道的特点管道的四种特殊情况管…

2024软件测试必问的常见面试题1000问!

01、您所熟悉的测试用例设计方法都有哪些&#xff1f;请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答&#xff1a;有黑盒和白盒两种测试种类&#xff0c;黑盒有等价类划分法&#xff0c;边界分析法&#xff0c;因果图法和错误猜测法。白盒有逻辑覆盖法&…

三子棋游戏

1、实现三子棋 test.c //测试游戏的逻辑 game.c //游戏代码的实现 game.h //游戏代码的声明&#xff08;函数声明&#xff0c;符号定义&#xff09; 1、 在主函数里实现&#xff0c;首先有个界面&#xff0c;让玩家选择是否玩游戏。上来就先打印菜单&#xff0c;用do ... …

优秀测试的核心能力!2招高效定位分析BUG!

之所以写这一篇文章&#xff0c;是突然想起来曾经在测试过程中被开发嘲讽过&#xff0c;事情是这样的&#xff0c;当时发现了一个疑似前端的Bug就草草提交到了禅道&#xff0c;结果刚来的女前端看到了就有点生气地问我为啥不查清到底是前后端问题就直接派给她前端了&#xff0c…

【python量化交易】—— Alpha选股策略 - Qteasy自定义交易策略【附源码】

使用qteasy创建并回测Alpha选股交易策略 使用qteasy创建并回测Alpha选股交易策略策略思想第一种自定义策略设置方法&#xff0c;使用持仓数据和选股数据直接生成比例交易信号PS信号&#xff1a;第二种自定义策略设置方法&#xff0c;使用PT交易信号设置持仓目标&#xff1a;第三…

【数组中重复的数据】leetcode,python

和上题一样&#xff0c;【找到所有数组中消失的数字】 换个判断条件就行 class Solution:def findDuplicates(self, nums: List[int]) -> List[int]:nlen(nums)for i in nums:x(i-1)%nnums[x]n#只需要替换条件即可return [i1 for i,num in enumerate(nums) if num>(2*n)…

海外云手机的运作原理和适用场景

海外云手机是一种基于云计算技术的虚拟手机服务&#xff0c;通过将手机操作系统和应用程序托管在远程服务器上&#xff0c;实现用户可以通过互联网连接来使用和管理手机功能&#xff0c;而无需实际拥有物理手机。以下是有关海外云手机的相关信息&#xff1a; 海外云手机的运作原…

如何利用命令提示符列出文件?这里提供了几个实例供你参考

序言 什么命令可以用来列出目录中的文件&#xff1f;如何在命令提示符Windows 10/11中列出文件&#xff1f;很多人对这些问题感到困惑。在这篇文章中&#xff0c;我们详细解释了命令提示符列出文件的主题。 CMD&#xff08;命令提示符&#xff09;是一个功能强大的Windows内置…

Keil问题解决:结构体数组初始化,初始化后的值不是目标值

省流&#xff1a;使用的编译器为compiler version 6&#xff0c;切换为compiler version 5 如果缺少编译器&#xff0c;请参考&#xff1a;Keil手动安装编译器V5版本 结构体定义&#xff1a; typedef struct _TASK_COMPONENTS {uint8_t Run; // 程序运行标…

雍禾植发张东宏:以诚相待毛发患者

医学道路上的奋斗往往需要坚定的信念和不懈的努力。对于张东宏医生来说&#xff0c;医学并非止步于书本知识&#xff0c;而是一次次与患者对话、一次次实操中的历练和积累。在他的成长历程中&#xff0c;医学之路如同一棵参天大树&#xff0c;每一步都是扎实的打磨&#xff0c;…

STM32F407 2个高级定时器生成2路无刷电机波形以及相电流采集程序(寄存器版)

stm32f407 高级定时1、定时8 生成20k 中心PWM 波形 并分别用其通道4 触发ADC1 ADC2 采样 用于分别两无刷电机foc 电流环控制&#xff0c;ADC1产生50us的电流采集完成中断&#xff0c;用于foc算法周期运算 主要参考高级定时器的寄存器和ADC寄存器 首先&#xff0c;要使用STM32F…

代码复现|Demucs Music Source Separation

一、背景介绍 Demucs是一个开源的音源分离项目。 Demucs在算法层面前后经历了三次大版本的进化&#xff0c;最原始的V1版本是&#xff1a;编解码LSTM。具体算法原理图如下所示。该版本在时域进行音源分离。关于阅读笔记请点击这篇文章。 V1版本原理图 V2版本是同时使用时域和频…

2、快速搭建Vue框架以及项目工程

本篇文章详细讲解在配置完vue2环境后如何快速搭建一个Vue框架和项目工程。&#xff08;以智慧农业云平台为例&#xff09; 2.1 Vue工程创建 2.1.1创建想要存放的Vue文件夹 找到想要存放的文件夹并在目录搜索框中&#xff0c;并用管理员的方式打开。 2.1.2创建Vue工程 2、安装…

prompt工程策略(一:使用 CO-STAR 框架来搭建 prompt 的结构)

原文&#xff1a;我是如何赢得GPT-4提示工程大赛冠军的 原文的原文&#xff1a; How I Won Singapore’s GPT-4 Prompt Engineering Competition 为了让 LLM 给出最优响应&#xff0c;为 prompt 设置有效的结构至关重要。CO-STAR 框架是一种可以方便用于设计 prompt 结构的模板…

2024最新Kali Linux安装教程(非常详细)从零基础入门到精通(附安装包)!

什么是Kali Linux&#xff1f; Kali Linux是一个高级渗透测试和安全审计Linux发行版&#xff0c;其功能非常强大&#xff0c;能够进行信息取证、渗透测试、攻击WPA / WPA2保护的无线网络、离线破解哈希密码、将android、Java、C编写的程序反编译成代码等等&#xff0c;是黑客的…

Invalid bound statement (not found) 六种解决方法

前五种参考博文&#xff1a; Invalid bound statement (not found) 五种解决方法-CSDN博客 第六种&#xff1a; 在启动类上加上MapperScan&#xff0c;指定扫描包

【C++】list原理讲解及其实现

目录 一、认识list底层结构 二、list的构造类函数 三、迭代器 四、数据的访问 五、容量相关的函数 六、关于数据的增删查改操作 七、list和vector的比较 前言 要模拟实现list&#xff0c;必须要熟悉list的底层结构以及其接口的含义&#xff0c;在上一篇我们仔细讲解了list的…

Gradio 案例——将 dicom 文件转为 nii文件

文章目录 Gradio 案例——将 dicom 文件转为 nii文件界面截图依赖安装项目目录结构代码 Gradio 案例——将 dicom 文件转为 nii文件 利用 SimpleITK 库&#xff0c;将 dicom 文件转为 nii文件更完整、丰富的示例项目见 GitHub - AlionSSS/dcm2niix-webui: The web UI for dcm2…