此次记录主要是为了下次使用时能回忆起来才做得笔记,若有需改进的地方,请不吝珠玉。

widget.cpp

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3.  
  4. Widget::Widget(QWidget *parent) :
  5. QWidget(parent),Chartdisplay(new ChartDisplay),
  6. ui(new Ui::Widget)
  7. {
  8. ui->setupUi(this);
  9. Chartdisplay->Ploar1Init(ui->customplot);//CustomPlot初始化
  10. Chartdisplay->Ploar1PrapareData();//数据填充
  11. }
  12.  
  13. Widget::~Widget()
  14. {
  15. delete ui;
  16. }

widget.h

  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3.  
  4. #include <QWidget>
  5. #include <QGroupBox>
  6. #include <QGridLayout>
  7. #include "chartdisplay.h"
  8.  
  9. namespace Ui {
  10. class Widget;
  11. }
  12.  
  13. class Widget : public QWidget
  14. {
  15. Q_OBJECT
  16.  
  17. public:
  18. explicit Widget(QWidget *parent = );
  19. ~Widget();
  20.  
  21. private:
  22. Ui::Widget *ui;
  23. ChartDisplay *Chartdisplay;
  24.  
  25. };
  26.  
  27. #endif // WIDGET_H

chartdisplay.cpp

  1. #include "chartdisplay.h"
  2.  
  3. ChartDisplay::ChartDisplay(QWidget *parent) : QWidget(parent){}
  4.  
  5. //CustomPlot初始化 坐标显示标签初始化
  6. void ChartDisplay::Ploar1Init(QCustomPlot *customplot)
  7. {
  8. //初始化坐标系范围和意义
  9. CustomPlot = customplot;
  10. CustomPlot->addGraph();
  11. CustomPlot->setSelectionTolerance();
  12. CustomPlot->graph()->setPen(QPen(Qt::darkGray,,Qt::SolidLine));
  13. CustomPlot->graph()->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssNone,));//曲线样式 样式大小
  14. CustomPlot->xAxis->setLabel("X");
  15. CustomPlot->yAxis->setLabel("Y");
  16. CustomPlot->xAxis->setRange(,);
  17. CustomPlot->yAxis->setRange(-,);
  18. CustomPlot->rescaleAxes(true);//开启自适应
  19. CustomPlot->setInteractions( QCP::iSelectPlottables | QCP::iRangeDrag |QCP::iRangeZoom );//先设置customplot的plottable绘图层可选 鼠标拖拽 滚轮缩放
  20.  
  21. TextTip = new QCPItemText(CustomPlot);
  22. TextTip->setPositionAlignment(Qt::AlignTop|Qt::AlignHCenter);
  23. TextTip->position->setType(QCPItemPosition::ptAbsolute);
  24. QFont font;
  25. font.setPixelSize();
  26. TextTip->setFont(font); // make font a bit larger
  27. TextTip->setPen(QPen(Qt::black)); // show black border around text
  28. TextTip->setBrush(Qt::white);
  29. TextTip->setVisible(false);
  30. connect(CustomPlot, SIGNAL(plottableClick(QCPAbstractPlottable*, int, QMouseEvent*)), this, SLOT(OnPlotClick(QCPAbstractPlottable*, int, QMouseEvent*)));//关联选点信号
  31. }
  32.  
  33. //CustomPlot数据填充
  34. void ChartDisplay::Ploar1PrapareData()
  35. {
  36. QVector<double> Xvalue();
  37. QVector<double> Yvalue();
  38. for (int i = ; i < ; i++) {
  39. Xvalue[i]=i;
  40. Yvalue[i]=*qSin(i * 10.0f / );
  41. }
  42. CustomPlot->graph()->setData(Xvalue,Yvalue);
  43. CustomPlot->replot();//重绘图形
  44. }
  45.  
  46. //选点处理函数
  47. void ChartDisplay::OnPlotClick(QCPAbstractPlottable *plottable, int dataIndex, QMouseEvent *event)
  48. {
  49. //先获取点击的绘图层名称,然后通过名称找到图层ID,再找到对应的数据点 这里因为知道ID 所以直接使用 没有通过名称找
  50. const QCPGraphData *ghd = CustomPlot->graph()->data()->at(dataIndex);
  51. QString text = "(" + QString::number(ghd->key,,) + "," + QString::number(ghd->value,,) + ")";
  52. TextTip->setText(text);//文本内容填充
  53. TextTip->position->setCoords(event->pos().x()+, event->pos().y()-);//文本框所在位置
  54. TextTip->setVisible(true);
  55. CustomPlot->replot();
  56. }

chartdisplay.h

  1. #ifndef CHARTDISPLAY_H
  2. #define CHARTDISPLAY_H
  3. #include <QWidget>
  4. #include "qcustomplot.h"
  5.  
  6. class ChartDisplay : public QWidget
  7. {
  8. Q_OBJECT
  9. public:
  10. explicit ChartDisplay(QWidget *parent = nullptr);
  11. QCustomPlot *CustomPlot;
  12. QCPItemText *TextTip;
  13. void Ploar1Init(QCustomPlot *customplot);
  14. void Ploar1PrapareData();
  15. private slots:
  16. void OnPlotClick(QCPAbstractPlottable *plottable, int dataIndex, QMouseEvent *event);
  17. };
  18.  
  19. #endif // CHARTDISPLAY_H

所有文件如图1  qcustomplot.h 和 qcustomplot.cpp可以直接去这里 http://www.qcustomplot.com/找找看;

下载完成后把.cpp和.h放在工程目录下,并将cpp和h加入工程;

切记要在.pro中:QT += printsupport;

在ui中添加一个Widget,右键提升为,如图2 输入:QCustomPlot,下面自动生成头文件,记得深蓝色部分要勾选 然后点提示即可

最后改变对象名称为customplot就可以和上面的代码吻合了;

图1

图2

效果图如图3所示  由于只是测试是否可以显示坐标,所以没有改进代码, 显示后挥之不去,哈哈^_^有点小尴尬。不过实际做项目的时候会在线程加上下面这句代码,实际效果还没有测试。(实测中发现如果不太耐心的人点击的时候应该会疯掉的罒ω罒)

  1. TextTip->setVisible(false);

图3

这只是一个基础代码,功能不是太多,需要后续拓展。我就不多解释代码了,注释应该已经很清楚了。

          常怀一颗心————空杯心

CustomPlot 在Qt下 鼠标点击曲线 显示当前坐标的更多相关文章

  1. Qt 模拟鼠标点击(QApplication::sendEvent(ui->pushbutton, &event0);)

    QPoint pos(0,0);QMouseEvent event0(QEvent::MouseButtonPress, pos, Qt::LeftButton, Qt::LeftButton, Qt ...

  2. QT下过多点的曲线绘制

    绘制过多点的曲线意义重大.但通过试验,QT的PainterPath不是很如意.当多段曲线围成一个区域时,PainterPath内并不包含该区域的所有面积,只包含曲线和其弦构成的面积. 为了解决这一问题 ...

  3. appearance格式化表单元素的边框,在chrome和FF下鼠标点击时会多出一个蓝色边框

    可在元素上添加样式 -webkit-appearance: none; -moz-appearance:none;outline:none; 清除掉元素所有的外貌,以便自定义风格

  4. textarea内容太多, 鼠标点击全部显示

    strRight+="<td bordercolor='#DEDEDE' width='500px' height='50'><div title='"+data ...

  5. html5中canvas的使用 获取鼠标点击页面上某点的RGB

    1.html5中的canvas在IE9中可以跑起来.在IE8则跑不起来,这时候就需要一些东西了. 我推荐这种方法,这样显得代码不乱. <!--[if lt IE9]> <script ...

  6. JQuery怎么实现页面刷新后保留鼠标点击样式的方法

    今天抽空研究了下鼠标点击添加样式的方法.为了防止忘记,写篇文章算是备份吧. $('ul.main-menu li a').each(function(){     if($($(this))[0].h ...

  7. 使用powershell/vbs自动化模拟鼠标点击操作

    今天想做windows上的自动化,所以才有了模拟鼠标点击的需求,先考虑用powershell实现: 首先先安装一个名为“WASP”免费可用的Powershell扩展程序,下载地址:http://was ...

  8. 【ARM开发板】迅为IMX6开发板QT下LVDS和HDMI双屏异显

    本文转自迅为论坛:http://www.topeetboard.com 平台:迅为-IMX6开发板 首先开发板分别连接9.7寸屏和HDMI显示器,然后使用MfgTool工具烧写QT系统,然后拨码开关设 ...

  9. JS高德地图应用 ---- 鼠标点击加入标记 & POI搜索

    代码如下 (填入Key值) : <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...

随机推荐

  1. day06总结

    字符串常用操作# ======================================基本使用======================================# 1.用途:记录描述 ...

  2. 小白pytorch安装以及初步了解

    安装遇到的几个坑: 1创建虚拟环境的时候出现Proceed ([y]/n)? 询问你是否覆盖旧版本,在命令行输入y即可进行下一步的安装操作了 安装pytorch前先了解 pytorch:一个开源pyt ...

  3. classpath路径(转)

    src不是classpath, WEB-INF/classes,lib才是classpathWEB-INF/ 是资源目录, 客户端不能直接访问, 这话是没错,不过现在的IDE编译器在编译时会把src下 ...

  4. java 基本语法(十七)Lambda (四)构造器引用与数组引用

    1.构造器引用格式:类名::new 2.构造器引用使用要求:和方法引用类似,函数式接口的抽象方法的形参列表和构造器的形参列表一致.抽象方法的返回值类型即为构造器所属的类的类型 3.构造器引用举例: / ...

  5. celery 基础教程(二):简单实例

    前言 使用celery包含三个方面:1. 定义任务函数.2. 运行celery服务.3. 客户应用程序的调用. 实例一: #1. 定义任务函数 创建一个文件 tasks.py输入下列代码: from ...

  6. python 面向对象专题(七):异常处理

    目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 2.try 6. 常见异常种类 1. ...

  7. C++算法 链式前向星存图

    这个东西恶心了我一阵子,那个什么是什么的上一个一直是背下来的,上次比赛忘了,回来有个题也要用,只能再学一遍,之前也是,不会为什么不学呢.我觉得是因为他们讲的不太容易理解,所以我自己给那些不会的人们讲一 ...

  8. javascript : splice(0) 的妙用

    今天看前同事的代码,有个写法很有意思: splice(0). 有意思的是,这并不是一个“合法”的写法. w3school是这样写的: arrayObject.splice(index,howmany, ...

  9. SW算法求全局最小割(Stoer-Wagner算法)

    我找到的唯一能看懂的题解:[ZZ]最小割集Stoer-Wagner算法 似乎是一个冷门算法,连oi-wiki上都没有,不过洛谷上竟然有它的模板题,并且2017百度之星的资格赛还考到了.于是来学习一下. ...

  10. git 缓存密码 unable to access... 403错误

    如果输入了 git config credential.helper 命令之后还是出现了osxkeychain, store 或者 cache 等,说明 git 的配置还是没有被清空,我参考了stac ...