最终实现功能:

1.鼠标单击生成游标(两个游标在一起),并随着鼠标移动而移动。

2.鼠标双击固定第一个游标,第二个游标仍可随着鼠标移动而移动。

3.鼠标再次双击固定第二个游标。

4.起始,结束编辑框分别显示第一个游标和第二个游标的位置信息。

头文件添加两个游标对象,画图函数和三个鼠标点击,双击,移动槽函数如下:

class CursorDialog : public QDialog
{Q_OBJECTpublic:explicit CursorDialog(QWidget *parent = nullptr);~CursorDialog();void PlotWaterfall(QCustomPlot* customPlot);QCustomPlot* customPlot;QCPColorMap* cpColorMap;QCPItemTracer* tracer1;QCPItemTracer* tracer2;bool    bTracer1;bool    bTracer2;private slots:void mousePress(QMouseEvent* e);void mouseDoubleClick(QMouseEvent* e);void mouseMove(QMouseEvent *e);private:Ui::CursorDialog *ui;
};
CursorDialog::CursorDialog(QWidget *parent) :QDialog(parent),ui(new Ui::CursorDialog)
{ui->setupUi(this);ui->lineEditStart->setText("0");ui->lineEditEnd->setText("0");customPlot = ui->widget;PlotWaterfall(customPlot);bTracer1 = false;bTracer2 = false;//信号连接槽函数connect(customPlot, SIGNAL(mousePress(QMouseEvent*)), this, SLOT(mousePress(QMouseEvent*)));connect(customPlot, SIGNAL(mouseDoubleClick(QMouseEvent*)), this, SLOT(mouseDoubleClick(QMouseEvent*)));connect(customPlot, SIGNAL(mouseMove(QMouseEvent*)), this, SLOT(mouseMove(QMouseEvent*)));}

画图函数PlotWaterfall(QCustomPlot* customPlot)中初始化两个游标

   //构造游标1tracer1 = new QCPItemTracer(customPlot);tracer1->setPen(QPen(Qt::SolidLine)); //实线游标tracer1->setStyle(QCPItemTracer::tsCrosshair);//十字星线tracer1->setSize(2.0);tracer1->setVisible(false);//构建游标2tracer2 = new QCPItemTracer(customPlot);tracer2->setPen(QPen(Qt::SolidLine)); //实线游标tracer2->setStyle(QCPItemTracer::tsCrosshair);//十字星线tracer2->setSize(2.0);tracer2->setVisible(false);
/*** @brief 鼠标点击事件* @param e*/
int clickNum = 0; //用于判断是偶数双击还是单数双击
void CursorDialog::mousePress(QMouseEvent* e)
{QCustomPlot *curCustomPlot = qobject_cast<QCustomPlot *>(sender());if(curCustomPlot == customPlot){if(e->button() == Qt::LeftButton){bTracer1 = true;tracer1->setVisible(true);bTracer2 = true;tracer2->setVisible(true);}if(e->button() == Qt::RightButton){bTracer1 = false;tracer1->setVisible(false);bTracer2 = false;tracer2->setVisible(false);clickNum = 0;}curCustomPlot->replot();}
}
/*** @brief 鼠标双击事件* @param e*/
void CursorDialog::mouseDoubleClick(QMouseEvent* e)
{QCustomPlot *curCustomPlot = qobject_cast<QCustomPlot *>(sender());if(curCustomPlot == customPlot){if(clickNum%2 == 0){bTracer1 = false;tracer1->setVisible(true);}else{bTracer2 = false;tracer2->setVisible(true);bTracer1 = false; //双击时会先触发单击事件,单击时会把bTracer1置为true,所以这里重新设置为false}clickNum++;}
}
/*** @brief 鼠标移动事件* @param e*/
void CursorDialog::mouseMove(QMouseEvent *e)
{QCustomPlot *curCustomPlot = qobject_cast<QCustomPlot *>(sender());if(curCustomPlot == customPlot){if(bTracer1){int x = curCustomPlot->xAxis->pixelToCoord(e->pos().x());int pos = x;if(pos < 0){return ;}qDebug() << "POS:" << pos;tracer1->position->setCoords(pos, 0);tracer1->setVisible(true);curCustomPlot->replot();ui->lineEditStart->setText(QString("%1").arg(x));}if(bTracer2){int x = curCustomPlot->xAxis->pixelToCoord(e->pos().x());int pos = x;if(pos < 0){return ;}tracer2->position->setCoords(pos, 0);tracer2->setVisible(true);curCustomPlot->replot();ui->lineEditEnd->setText(QString("%1").arg(x));}}
}

QCustomPlot绘图并设置游标,双游标相关推荐

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

    系列文章目录 提示:这里是该系列文章的所有文章的目录 第一章: (一)QCustomPlot常见属性设置.多曲线绘制.动态曲线绘制.生成游标.矩形放大等功能实现 第二章: (二)QCustomPlot ...

  2. 快速排序 ——双游标、单游标实现

    #include <cstdio> #include <iostream>using namespace std; // 双游标版本 int* partition(int *l ...

  3. 使用QCustomPlot绘图的基础

    使用QCustomPlot绘图的基础 首先你用QCustomPlot::addGraph创建一个曲线图然后你给曲线图赋一些数据点(一对QVector<double>为x,y的值)并且定义曲 ...

  4. 什么是mysql的游标_MySQL游标概念是什么 MySQL游标概念与用法介绍

    本篇文章小编给大家分享一下MySQL游标概念与用法介绍,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 1.游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接 ...

  5. oracle中的cursor属性有哪些,Oracle学习11:游标(cursor)--显式游标隐式游标、游标四个属性、循环遍历...

    1.概述 上文PLSQL学习中提到的知识,可以发现,基本都可以通过Java等语言实现,而为了实现程序的可移植性,实际开发工作中我们也是如此做的. 那么PLSQL的重点是什么呢?接下来我们来介绍游标cu ...

  6. 游标(概念、优点、分类、静态游标的使用(显示游标(显示游标的属性、遍历显示游标、显示游标的FOR循环)、隐式游标(隐式游标的属性))、动态游标的使用、静态游标和动态游标的区别、更新或删除当前游标数据

    文章目录 游标 游标概念 游标优点 游标分类 静态游标的使用 显示游标 显示游标的属性 遍历显示游标 显示游标的FOR循环 接收显式游标数据的数据类型(普通变量.记录变量.集合变量) 通过游标更新.删 ...

  7. Qt间接平差法进行直线拟合(Eigen运算、Qcustomplot绘图)

    目录 间接平差法进行直线拟合,使用Qt.Qcustomplot.Eigen 间接平差法直线拟合原理 工具介绍 Qt Qcustomplot Eigen 准备工作 1.Qt读取文件存入矩阵 2.Eige ...

  8. mysql游标_MySQL游标概念与用法详解

    本文实例讲述了MySQL游标概念与用法.分享给大家供大家参考,具体如下: 1.游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接口,就是游标,沿着游标,可以一次取出1行.如果开发过安卓 ...

  9. 【MATLAB】基本绘图 ( 图形设置 | 坐标轴开关 | box 开关 | 网格开关 | 坐标轴样式 )

    文章目录 一.绘图相关设置 1.绘制多图 二.绘图相关代码示例 1.四个坐标样式展示 2.网格开关 3.box 开关 4.坐标轴开关 一.绘图相关设置 1.绘制多图 绘图相关设置 : 开关网格 : g ...

最新文章

  1. jstack分析cpu占用100%
  2. PHP多选题怎么弄,php多选题评分算法求指导解决方法
  3. BSP application view instance lifetime analysis
  4. Teams App抽奖机器人 - 基础架构
  5. Deepin 下安装 LAMP
  6. LeetCode 1228. 等差数列中缺失的数字
  7. 微信小程序开发之路(三)
  8. 接口测试--ApiPost组成介绍
  9. AD 组策略应用与排错(1应用)
  10. MySQL数据库分布式事务XA实现原理分析
  11. python中递归函数
  12. RGB颜色查询对照表
  13. 手机计算机无法使用,用数据线把手机连接电脑,电脑无法识别,怎么回事?
  14. 树莓派开机启动python脚本的另一种方法
  15. kernel panic-not syncing:IO-APIC+timer doesn't work!
  16. Windows自带的播放器Media Player实现快进
  17. TS装饰器、混入Mixins、TS模块、命名空间
  18. Android 开发中调用google语音接口
  19. 智慧城市发展情况及未来
  20. 浙江大学工程师学院非全日制定向工程管理【125601】招生问答

热门文章

  1. Django 图片上传
  2. ArcBlock ⑪ 月报 | 无惧寒冬 ABT 2019 区块链远征启程
  3. 《游戏设计艺术(第2版)》——学习笔记(17)第17章 有种体验叫作故事
  4. Summertime_cinnamons --罗马音歌词
  5. 《做最好的员工》第一章:好员工才会成功
  6. NYIST汉诺塔(一)(三)问题以及汉诺塔的路径实现
  7. sqlserver 之STUFF的运用
  8. 西安电子科技大学2018考研复试计算机类上机试题总结
  9. 多目标优化算法学习笔记(一)
  10. 【数据库数据恢复】Sql Server数据库数据恢复案例