QT使用QCustomPlot-需要检测鼠标未在图表上



我在一个应用程序中使用QCustomPlot,该应用程序专注于显示外部设备结果的图形。我有一个使用QMouseEvent的光标。每当我得到鼠标事件时,它都会从鼠标位置到轴绘制一条水平线和垂直线。

void PlotClass::ChartMouseMove(QMouseEvent* mouse){
double x = ui->customplot->xAxis->pixelToCoord(mouse->pos().x());
double y = ui->customplot->yAxis->pixelToCoord(mouse->pos().y());
//QCPItemStraightLine *infLine = new QCPItemStraightLine(ui->customplot);
//    infLine->point1->setCoords(x, 0);  // location of point 1 in plot coordinate
//    infLine->point2->setCoords(2, 1);  // location of point 2 in plot coordinate
qDebug() << x << y;
//  ui->customplot->xAxis->range().minRange();
double xLow = ui->customplot->xAxis->range().lower;
double xHigh = ui->customplot->xAxis->range().upper;
double yLow = ui->customplot->yAxis->range().lower;
double yHigh = ui->customplot->yAxis->range().upper;
infLinex->start->setCoords(x, yLow);  // location of point 1 in plot coordinate
infLinex->end->setCoords(x, yHigh);  // location of point 2 in plot coordinate
infLiney->start->setCoords(xLow, y);  // location of point 1 in plot coordinate
infLiney->end->setCoords(xHigh, y);  // location of point 2 in plot coordinate
ui->customplot->replot();
}

我需要做的是当鼠标不再在图表上时删除光标。不知道该怎么做。

将实际光标位置绘制到文本中的行(轴上的值(也是很好的

Ok想明白了。我只是把这个函数调用放在计时器事件中(可能不是最好的方法,但它可以工作(

void PlotClass::CheckHidecursor(void){
if(!Hidecursor && !ui->customplot->underMouse()){
Hidecursor = true;
infLinex->setVisible(false);
infLiney->setVisible(false);
yLabel->setVisible(false);
xLabel->setVisible(false);
qDebug() <<  "Hide";
ui->customplot->replot();
}
}

因此,如果鼠标不再放在图表小部件上,它会隐藏我输入的行和数字。我发现的关键函数是QWidget::underMouse((,它给出了一个真/假响应。

相关内容

  • 没有找到相关文章

最新更新