首页 > 其他分享 >QT QCustomPlot 中用参考线标示曲线的值

QT QCustomPlot 中用参考线标示曲线的值

时间:2022-12-23 11:36:09浏览次数:65  
标签:cur power 标示 QCustomPlot Label temp Qt tracer QT

https://blog.csdn.net/qq_37006532/article/details/127537965

一、前言

嵌入式触摸系统

主要介绍qt用QCustomPlot实现曲线绘制后,点击屏幕,在曲线上显示点击位置的曲线值和参考线

二、开发环境

开发环境 QT5 + linux + QCustomPlot 2.0

前提是已经完成基本曲线绘制功能,这里不介绍曲线绘制功能

三、正文

这里需要使用QCustomPlot的里面的三个类

1.QCPItemTracer

        这个是用来在曲线上画红色圆形标记的(追踪器)

2.QCPItemText

        这个是用来显示曲线值的(label 标签)

3.QCPItemStraightLine

        这个是用来绘制红色的垂直虚线的(在方向上无限延伸)

因为需要标识2个曲线的值,所以在使用时需要

定义2个追踪器、2个数值标签、1个直线

  1. QCPItemTracer *m_tracer_temp;//追踪器的一个标记
  2. QCPItemText *m_cur_Label_temp;//显示坐标的文本
  3. QCPItemTracer *m_tracer_power;
  4. QCPItemText *m_cur_Label_power;
  5. QCPItemStraightLine *m_refer_lineV;//参考线

初始化配置,主要是配置对象显示风格,可以自己根据需求修改

  1. m_tracer_temp = new QCPItemTracer(ui->widgetPlot); //设置部件的父类
  2. m_tracer_temp->setStyle(QCPItemTracer::tsCircle); //标记点的类型设置为圆形
  3. m_tracer_temp->setPen(QPen(Qt::red, 3, Qt::SolidLine)); //标记点颜色、粗细、线型
  4. m_tracer_temp->setBrush(Qt::SolidPattern); //画刷
  5. m_tracer_power = new QCPItemTracer(ui->widgetPlot);
  6. m_tracer_power->setStyle(QCPItemTracer::tsCircle);
  7. m_tracer_power->setPen(QPen(Qt::red, 3, Qt::SolidLine));
  8. m_tracer_power->setBrush(Qt::SolidPattern);
  9. m_tracer_power->position->setType(QCPItemPosition::ptPlotCoords);//在曲线上显示
  10. m_tracer_power->setSize(5); //标记点大小
  11. m_tracer_temp->position->setType(QCPItemPosition::ptPlotCoords);//在曲线上显示
  12. m_tracer_temp->setSize(5);
  13. m_tracer_temp->setGraph(ui->widgetPlot->graph(0)); //标记点绑定曲线
  14. m_tracer_power->setGraph(ui->widgetPlot->graph(1));
  1. m_cur_Label_temp = new QCPItemText(ui->widgetPlot);//文本框父类设置
  2. // m_cur_Label->setPadding(QMargins(3, 3, 3, 3)); //这个根据需求设置,我这不需要
  3. // m_cur_Label->setPen(QPen(QColor(130, 130, 130), 0, Qt::DotLine));
  4. // m_cur_Label->setBrush(Qt::NoBrush);
  5. //设置标签显示位置跟随锚点的位置
  6. m_cur_Label_temp->position->setParentAnchor(m_tracer_temp->position);
  7. m_cur_Label_temp->setFont(QFont(qApp->font().family(), 12)); //设置字体大小
  8. m_cur_Label_temp->setColor(Qt::white); //设置字体颜色
  9. m_cur_Label_power = new QCPItemText(ui->widgetPlot);//文本框父类设置
  10. //设置标签显示位置跟随锚点的位置
  11. m_cur_Label_power->position->setParentAnchor(m_tracer_power->position);
  12. m_cur_Label_power->setFont(QFont(qApp->font().family(), 12));
  13. m_cur_Label_power->setColor(Qt::white);
  14. //设置标签对齐方式
  15. m_cur_Label_temp->setPositionAlignment(Qt::AlignLeft | Qt::AlignVCenter);
  16. m_cur_Label_power->setPositionAlignment(Qt::AlignLeft | Qt::AlignVCenter);
  1. //垂直参考线
  2. m_refer_lineV = new QCPItemStraightLine(ui->widgetPlot);
  3. m_refer_lineV->setPen(ReferLinePen);

4.定义鼠标事件

用鼠标按下和释放都行

  1. private slots:
  2. void slot_mouseRelease(QMouseEvent *event);

关联鼠标事件槽函数 

connect(ui->widgetPlot, SIGNAL(mouseRelease(QMouseEvent *)), this, SLOT(slot_mouseRelease(QMouseEvent *)));

定义槽函数,绘制标记点和参考线 

  1. void PlotPanel::slot_mouseRelease(QMouseEvent *event)
  2. {
  3. //点击坐标
  4. QPointF CPoint = event->pos();
  5. //鼠标点击的后屏幕位置转换到下坐标轴对应坐标
  6. int16_t cur_x = ui->widgetPlot->xAxis->pixelToCoord(CPoint.x());
  7. //标记点和标签
  8. double y_value = m_vect_temp_all.at(cur_x); //获取曲线在X轴位置的Y值
  9. m_tracer_temp->setGraphKey(cur_x); //设置标记点X轴的位置
  10. m_tracer_temp->position->setCoords(cur_x, y_value); //设置标记点在位置
  11. m_cur_Label_temp->position->setCoords(0, 10); //设置标签显示偏移位置
  12. m_cur_Label_temp->setText(QString::number(y_value, 'f', 1)); //设置标签的值
  13. double y_value1 = m_vect_power_all.at(cur_x);
  14. m_tracer_power->setGraphKey(cur_x);
  15. m_tracer_power->position->setCoords(cur_x, y_value1);
  16. m_cur_Label_power->position->setCoords(0, 10);
  17. m_cur_Label_power->setText(QString::number(y_value1, 'f', 1));
  18. //垂直参考线,就是两点一线
  19. m_refer_lineV->point1->setCoords(cur_x, y_value); //设置点1的值
  20. m_refer_lineV->point2->setCoords(cur_x, y_value1); //设置点2的值
  21. ui->widgetPlot->replot();
  22. }

标签:cur,power,标示,QCustomPlot,Label,temp,Qt,tracer,QT
From: https://www.cnblogs.com/mkmkbj/p/17000301.html

相关文章

  • QT组件说明
    QtCore:核心模块,提供了其它模块所必需的数据类型和非图像类;QtGUI:图形用户界面(GUI)组件的基类;QtQuick(QML):用于构建具有自定义用户界面的高动态应用程序的声明......
  • Qt程序打包成单独exe的方法
    (1)QT编译kit安装路径:c:\Qt\6.4.0\mingw_64\(2)打开命令行工具cmd,使用windeployqt对生成的exe文件进行打配置动态库文件:  c:\Qt\6.4.0\mingw_64\bin\windeployqt.......
  • 基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)
    GoQTtemplate3是我为编写Linux下图像处理程序实现的框架,希望能够为大家解决Linux环境下桌面图像处理程序,提供一些帮助。文中相关代码请参考:​​https://github.com/jsxyhe......
  • 快速阅读《QT5.9 c++开发指南》1
    目录:书共分为16章,每章涉及一个主题或Qt的功能模块,涵盖了Qt应用程序开发的主要功能模块。人民邮电出版社异步社区本书的页面提供的“样章下载”,可......
  • qt的窗口
      1.窗口、字部件以及窗口类型(记得不牢固的)(1)#include<QtWidget>Widgets是在Qt中创建用户界面的主要元素。Widgets可以显示数据和状态信息,接收用户输入,并为应......
  • MQTT服务(C#)
    MQTT服务(C#)MQTT服务器(C#)开启MQTT服务器,需要用到库MQTTnet,使用VS2019企业版。右键管理Nuget包,搜索下载MQTTnet(3.0.16版本)并安装,Install-PackageMQTTNET,出现下列提示,......
  • Qt 操作QList程序莫名崩溃
    RT,QList是私有成员变量,在某个函数里面append或者clear,程序都会莫名崩溃,在“概要信息”提示“ProjectMESSAGE:Thisisnotabug,butaresultofusingQtinternals.Y......
  • QT 开发快速入门
    本人qt业余,但有的时候要用到qt,而又没有系统的学习,用到哪里看哪里。环境:vs2012+qt-vsaddins+qt5.5  qt的按钮点击事件出发的基本要素:1.按钮触发函数为public......
  • QT 的 ModelView
     QApplicationa(argc,argv);  QDirModelmodel;  //QDirModel,  问文件目录树  QTreeViewtree;  QListViewlist;  QTableViewtable;//共......
  • QCustomPlot基础教程(十三)——Qt中QCustomPlot清除已绘制的曲线方法总结(全面汇总)
    https://blog.csdn.net/didi_ya/article/details/121237553目录1、前言2、方法一——clearGraphs()3、方法二——clearPlottables()4、方法三——clear()5、方法四......