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

widget.cpp

 #include "widget.h"
#include "ui_widget.h" Widget::Widget(QWidget *parent) :
QWidget(parent),Chartdisplay(new ChartDisplay),
ui(new Ui::Widget)
{
ui->setupUi(this);
Chartdisplay->Ploar1Init(ui->customplot);//CustomPlot初始化
Chartdisplay->Ploar1PrapareData();//数据填充
} Widget::~Widget()
{
delete ui;
}

widget.h

 #ifndef WIDGET_H
#define WIDGET_H #include <QWidget>
#include <QGroupBox>
#include <QGridLayout>
#include "chartdisplay.h" namespace Ui {
class Widget;
} class Widget : public QWidget
{
Q_OBJECT public:
explicit Widget(QWidget *parent = );
~Widget(); private:
Ui::Widget *ui;
ChartDisplay *Chartdisplay; }; #endif // WIDGET_H

chartdisplay.cpp

 #include "chartdisplay.h"

 ChartDisplay::ChartDisplay(QWidget *parent) : QWidget(parent){}

 //CustomPlot初始化 坐标显示标签初始化
void ChartDisplay::Ploar1Init(QCustomPlot *customplot)
{
//初始化坐标系范围和意义
CustomPlot = customplot;
CustomPlot->addGraph();
CustomPlot->setSelectionTolerance();
CustomPlot->graph()->setPen(QPen(Qt::darkGray,,Qt::SolidLine));
CustomPlot->graph()->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssNone,));//曲线样式 样式大小
CustomPlot->xAxis->setLabel("X");
CustomPlot->yAxis->setLabel("Y");
CustomPlot->xAxis->setRange(,);
CustomPlot->yAxis->setRange(-,);
CustomPlot->rescaleAxes(true);//开启自适应
CustomPlot->setInteractions( QCP::iSelectPlottables | QCP::iRangeDrag |QCP::iRangeZoom );//先设置customplot的plottable绘图层可选 鼠标拖拽 滚轮缩放 TextTip = new QCPItemText(CustomPlot);
TextTip->setPositionAlignment(Qt::AlignTop|Qt::AlignHCenter);
TextTip->position->setType(QCPItemPosition::ptAbsolute);
QFont font;
font.setPixelSize();
TextTip->setFont(font); // make font a bit larger
TextTip->setPen(QPen(Qt::black)); // show black border around text
TextTip->setBrush(Qt::white);
TextTip->setVisible(false);
connect(CustomPlot, SIGNAL(plottableClick(QCPAbstractPlottable*, int, QMouseEvent*)), this, SLOT(OnPlotClick(QCPAbstractPlottable*, int, QMouseEvent*)));//关联选点信号
} //CustomPlot数据填充
void ChartDisplay::Ploar1PrapareData()
{
QVector<double> Xvalue();
QVector<double> Yvalue();
for (int i = ; i < ; i++) {
Xvalue[i]=i;
Yvalue[i]=*qSin(i * 10.0f / );
}
CustomPlot->graph()->setData(Xvalue,Yvalue);
CustomPlot->replot();//重绘图形
} //选点处理函数
void ChartDisplay::OnPlotClick(QCPAbstractPlottable *plottable, int dataIndex, QMouseEvent *event)
{
//先获取点击的绘图层名称,然后通过名称找到图层ID,再找到对应的数据点 这里因为知道ID 所以直接使用 没有通过名称找
const QCPGraphData *ghd = CustomPlot->graph()->data()->at(dataIndex);
QString text = "(" + QString::number(ghd->key,,) + "," + QString::number(ghd->value,,) + ")";
TextTip->setText(text);//文本内容填充
TextTip->position->setCoords(event->pos().x()+, event->pos().y()-);//文本框所在位置
TextTip->setVisible(true);
CustomPlot->replot();
}

chartdisplay.h

 #ifndef CHARTDISPLAY_H
#define CHARTDISPLAY_H
#include <QWidget>
#include "qcustomplot.h" class ChartDisplay : public QWidget
{
Q_OBJECT
public:
explicit ChartDisplay(QWidget *parent = nullptr);
QCustomPlot *CustomPlot;
QCPItemText *TextTip;
void Ploar1Init(QCustomPlot *customplot);
void Ploar1PrapareData();
private slots:
void OnPlotClick(QCPAbstractPlottable *plottable, int dataIndex, QMouseEvent *event);
}; #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所示  由于只是测试是否可以显示坐标,所以没有改进代码, 显示后挥之不去,哈哈^_^有点小尴尬。不过实际做项目的时候会在线程加上下面这句代码,实际效果还没有测试。(实测中发现如果不太耐心的人点击的时候应该会疯掉的罒ω罒)

 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. day13 函数入门

    目录 一.什么是函数 二.为何要有函数 三.如何用函数 1.定义函数的三种形式: 形式一.无参函数(自身能干活) 形式二.有参函数(需要外部的材料来加工) 形式三.空函数(在写框架构思函数的时候) 2 ...

  2. JavaScript图形实例:Canvas API

    1.Canvas概述 Canvas API(画布)用于在网页实时生成图像,并且可以操作图像内容,基本上它是一个可以用JavaScript操作的位图(bitmap). 要使用HTML5在浏览器窗口中绘制 ...

  3. linux专题(五):常用的基本命令(三)文件内容查看

    http://dwz.date/UDf 概述 Linux系统中使用以下命令来查看文件的内容: cat 由第一行开始显示文件内容 tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写! n ...

  4. AcWing 94. 递归实现排列型枚举

    AcWing 94. 递归实现排列型枚举 题目链接 把 1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序. 输入格式 一个整数n. 输出格式 按照从小到大的顺序输出所有方案,每行1个. ...

  5. Python 爬取 42 年高考数据,告诉你高考为什么这么难?

    作者 | 徐麟 历年录取率 可能很多经历过高考的人都不知道高考的全称,高考实际上是普通高等学校招生全国统一考试的简称.从1977年国家恢复高考制度至今,高考经历了许多的改革,其中最为显著的变化就是录取 ...

  6. SQLite数据库多平台应用及常见错误分析

    SQLite是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的SQL数据库引擎.SQLite是世界上最广泛部署的数据库引擎之一.SQLite源代码开放,没有授权限制.正是因为其免费.轻巧. ...

  7. P1776 宝物筛选

    题目: 正文: 啊,多重背包真恶心... 一开始我是把多重背包改成了01背包,然鹅我当时是直接1个1个的往后摞的... 参见以下代码: for(int i=1;i<=n;++i){//平平无奇的 ...

  8. SQL数据单条转多条(Lateral View)

    Lateral View和split,explode等UDTF一起使用,它能够将一行数据拆成多行数据,并在此基础上对拆分后的数据进行聚合. 单个Lateral View语句语法定义如下:lateral ...

  9. 题解 洛谷 P6142 【[USACO20FEB]Delegation P】

    和赛道修建类似,先对\(k\)进行二分,将最值问题转化为判定问题. 在判定一个\(k\)是否合法时,贪心去考虑,一个节点下面的若干条链在合并时,一条链肯定和另一条使它合并后恰好满足长度限制的链合并最优 ...

  10. 题解 洛谷 P1552 【[APIO2012]派遣】

    根据题意,我们不难发现忍者之间的关系是树形结构. 发现答案的统计只是在该节点的子树中,因此我们考虑通过树形\(DP\)来解决问题. 从叶子节点开始,从下往上考虑,因为一个节点的最优答案只与他的领导力和 ...