//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- QPointF RiuSummaryQwtPlot::closestCurvePoint(const QPoint& cursorPosition, QString* valueString, QString* timeString, int* yAxis) const { QPointF samplePoint; QwtPlotCurve* closestCurve = nullptr; double distMin = DBL_MAX; int closestPointSampleIndex = -1; const QwtPlotItemList& itmList = itemList(); for (QwtPlotItemIterator it = itmList.begin(); it != itmList.end(); it++) { if ((*it)->rtti() == QwtPlotItem::Rtti_PlotCurve) { QwtPlotCurve* candidateCurve = static_cast<QwtPlotCurve*>(*it); double dist = DBL_MAX; int candidateSampleIndex = candidateCurve->closestPoint(cursorPosition, &dist); if (dist < distMin) { closestCurve = candidateCurve; distMin = dist; closestPointSampleIndex = candidateSampleIndex; } } } if (closestCurve && distMin < 50) { samplePoint = closestCurve->sample(closestPointSampleIndex); if (yAxis) *yAxis = closestCurve->yAxis(); } if (timeString) { const QwtScaleDraw* timeAxisScaleDraw = axisScaleDraw(QwtPlot::xBottom); if (timeAxisScaleDraw) { *timeString = timeAxisScaleDraw->label(samplePoint.x()).text(); } } if (valueString && closestCurve) { const QwtScaleDraw* yAxisScaleDraw = axisScaleDraw(closestCurve->yAxis()); if (yAxisScaleDraw) { *valueString = yAxisScaleDraw->label(samplePoint.y()).text(); } } return samplePoint; }