运行截图如下:

逻辑很简单,下面直接上代码。

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>#include "qcustomplot.h"namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();public slots:void myMousePressEvent(QMouseEvent *event);void myMouseReleaseEvent(QMouseEvent *event);void myMouseMoveEvent(QMouseEvent *event);private:Ui::Widget *ui;QString m_myName;QVector<double> x,y;int m_point;
};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"#include <QDebug>
#include <math.h>
#include <QTime>Widget::Widget(QWidget *parent) :QWidget(parent),x(100),y(100),m_point(-1),ui(new Ui::Widget)
{ui->setupUi(this);m_myName="我的折线图";for(int i=0;i<100;i++){x[i]=i;y[i]=1;}this->setWindowTitle("CSDN IT1995");ui->plot->addGraph();ui->plot->graph()->setData(x,y);ui->plot->graph()->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssCircle, QPen(Qt::black, 1.5), QBrush(Qt::white), 9));ui->plot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom);connect(ui->plot,SIGNAL(mousePress(QMouseEvent*)),this,SLOT(myMousePressEvent(QMouseEvent*)));connect(ui->plot,SIGNAL(mouseRelease(QMouseEvent*)),this,SLOT(myMouseReleaseEvent(QMouseEvent*)));connect(ui->plot,SIGNAL(mouseMove(QMouseEvent*)),this,SLOT(myMouseMoveEvent(QMouseEvent*)));
}Widget::~Widget()
{delete ui;
}void Widget::myMousePressEvent(QMouseEvent *event)
{qDebug()<<"mousePressEvent";int x_pos = event->pos().x();int y_pos = event->pos().y();float x_val = ui->plot->xAxis->pixelToCoord(x_pos);float y_val = ui->plot->yAxis->pixelToCoord(y_pos);for(int i=0;i<100;i++){if(fabs(x_val-x.at(i))<0.3&&fabs(y_val-y.at(i))<0.3){qDebug()<<"现在选择的是第"<<i<<"个点";m_point=i;break;}}}void Widget::myMouseReleaseEvent(QMouseEvent *event)
{ui->plot->setInteractions(QCP::iRangeDrag|QCP::iRangeZoom);m_point=-1;
}void Widget::myMouseMoveEvent(QMouseEvent *event)
{if(m_point==-1)return;ui->plot->setInteractions(QCP::iRangeZoom);int x_pos = event->pos().x();int y_pos = event->pos().y();float x_val = ui->plot->xAxis->pixelToCoord(x_pos);float y_val = ui->plot->yAxis->pixelToCoord(y_pos);x[m_point]=x_val;y[m_point]=y_val;ui->plot->graph()->setData(x, y);ui->plot->replot();}

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

Qt工作笔记-使用QCustomplot实现鼠标拖动数据点画曲线相关推荐

  1. Qt工作笔记-QGraphicsProxyWidget放自定义界面实现拖动

    原理: 因为在视图中,所以和传统的widget中界面拖动不一样! 要把坐标转化为视图的坐标才行! 运行截图如下: 里面的界面是这样的: 程序结构如下: 源码如下: form.h #ifndef FOR ...

  2. Qt工作笔记-在QTreeView上实现模型数据的拖拽

    运行截图如下: 逻辑是: 1.QTreeView开发拖拽功能. 2.在自定义模型中重写 flags(const QModelIndex &index) const mimeData(const ...

  3. Qt工作笔记-在ListWidget中多线程检索数据

    文件读取技术在此链接中: https://blog.csdn.net/qq78442761/article/details/79807826 在ListWidget中单线程检索数据在此链接中: htt ...

  4. Qt工作笔记-在ListWidget中单线程检索数据

    文件读取技术在此链接中: https://blog.csdn.net/qq78442761/article/details/79807826 运行截图如下: 代码如下: widget.h #ifnde ...

  5. Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包

    原理以及运行 原理是因为QJsonDocument提供了一个函数toJson 可以直接把Json数据转成QByteArray,这样就可以直接发送数据包,然后再按照常规方法解析即可,本源码中含解析内容, ...

  6. Qt工作笔记-QListWidget鼠标拖动,一个到另一个,并遍历

    运行截图如下: 源代码很简单,如下: widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include < ...

  7. Qt工作笔记-图形视图框架中的分组,以及添加平行拖动图元

    啥意思,感觉本人语文学得菜,不好描述. 直接看程序运行截图: 1.隐藏鼠标: 2.图元分组: 3.视图与场景坐标转换 程序源码如下: mygraphicsitem.h #ifndef MYGRAPHI ...

  8. Qt工作笔记-ListWidget拖动(拖拽)到QGraphicsScene【补坑】【Qt视图框架补坑】

    关于以前的这篇博文,进行补坑 https://blog.csdn.net/qq78442761/article/details/80957186 坑的位置在这,采用上面这篇博文的配法,无法得到图元在场 ...

  9. Qt工作笔记-QCustomplot绘制表,实现输入定位功能

    运行截图如下: 文件结构图如下: 代码如下: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include & ...

最新文章

  1. centos mysql5.7主从同步配置_centos7搭建mysql5.7主从同步
  2. ubuntu安装 zookeeper3.3.6 由于jdk问题启动失败
  3. 在给定约束下可以使用a,b和c形成的字符串数
  4. python语言的三个主要特点_python干货|新总结的4个python语言的特点,这几个细节值得关注...
  5. Could not load type 'System.DateTimeOffset'的问题
  6. 固态硬盘简称是不是ssd_小白科普:没想到你是这样的固态硬盘
  7. VC.【转】采用_beginthread/_beginthreadex函数创建多线程
  8. 系统自带命令subst.exe创建虚拟软驱
  9. 山石岩读丨前沿领域探析——汽车CAN总线协议详解及攻击面分析
  10. 基于VUE技术的超市购物系统设计答辩PPT模板
  11. 编写Java程序,使用抽象类和抽象方法构建不同动物的扑食行为,抽象类设计
  12. 球的表面积公式是怎么推导出来的?
  13. python-pygame实现飞机大战-4-获取补给、发射强化子弹以及放大招清屏
  14. Vue全网最细入门(一)
  15. 计算机组成原理知识架构
  16. 卡迈克尔数 Carmichael Numbers(挑战程序设计竞赛)
  17. Xcode工程文件pbxproj
  18. 优秀的Android开源框架(持续更新)
  19. 离线安装ffmpeg
  20. php截取部分pdf,用PHP从pdf中提取图像

热门文章

  1. SunPinyin: Linux下最好用的拼音输入法,MacOSX下也是不错的,还免费,可以不用买IMKQIM了...
  2. 让你编程能力秃飞猛进的好习惯
  3. 还在被Excel报表折磨?学会这个进阶工具,报表开发不是事儿
  4. freeeim源码一个个投篮的命中
  5. 飞鸽传书官方网站 2012 最新源码公开
  6. 作一个真正合格的飞秋局域网聊天
  7. 无聊!为何说程序员是最实用主义?
  8. 程序员谈谈我的职场观(一)
  9. 了结对编程和飞鸽传书
  10. VBSCRIPT的循环挺好理解的