原理是通过鼠标事件获取点击的坐标点,然后经过一系列转换,获取坐标值:
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()
将窗体坐标先装换为父窗体坐标再转换为全局坐标)