获取选中点对于Qcustomplot坐标轴的坐标值

原理是通过鼠标事件获取点击的坐标点,然后经过一系列转换,获取坐标值:
1、头文件中定义鼠标事件槽函数:

private slots:
void slot_mouseRelese(QMouseEvent*);

2、源文件中定义信号槽:

//Qcustomplot鼠标事件信号槽
    connect(ui->customplot, SIGNAL(mouseRelease(QMouseEvent*)),this, SLOT(slot_mouseRelese(QMouseEvent*)));

3、在Qcustomplot的初始化函数中,确定鼠标点击的精度:

     ui->customplot->setSelectionTolerance(1);

4、编写槽函数:

//排除非左鼠标键
    if (event->button() != Qt::LeftButton){        return;    }

//获取点击的点坐标
    QPointF ChickedPoint = event->pos();
//排除区间外鼠标点
    if(!ui->customplot->viewport().contains(event->pos())){return;}
//将像素坐标转换为轴值
     double currentx = ui->customplot->xAxis->pixelToCoord(ChickedPoint.x());
     double currenty = ui->customplot->yAxis->pixelToCoord(ChickedPoint.y()); 
//使用QToolTip输出值,
QToolTip::showText(mapToGlobal(event->pos()),QString("当前点值为:%1").arg(currenty),this);

需要注意的是:QToolTip::showText的函数原型将第一个参数视为全局坐标,当窗口不为全屏时,会造成困扰(QToolTip的输出信息可能会在窗口之外),event->pos()获取的是被点击的点在窗体中的坐标,而不是在整个屏幕中的坐标,例如,窗体坐标为(0,0)的点被点击,QToolTip::showText的输出信息就会出现在屏幕左上角而不是窗体左上角。因此,我们需要用函数mapToGlobal将点击的窗体坐标转换为全局坐标。(如果该窗体有父窗体,还需要使用mapToParent()将窗体坐标先装换为父窗体坐标再转换为全局坐标)

猜你喜欢

转载自blog.csdn.net/qq_40194498/article/details/79989678
今日推荐