Qt QXYSeries и ChartView - изменяют поведение при наведении для запуска в диапазоне

У меня есть точечная диаграмма, представленная QXYSeries и просматриваемая с помощью ChartView из Qt Charts 5.7.

Я хочу навести курсор мыши на график, чтобы "завис" триггер на определенном расстоянии, а не только тогда, когда мой курсор находится прямо над точкой. Представьте круг вокруг мыши, который будет вызывать зависание всякий раз, когда какая-либо часть серии находится внутри него.

Есть ли способ получить такое поведение?

1 ответ

Решение

В конце концов, я получил это поведение, создав класс, который наследуется от QChartView и переопределив mouseMoveEvent(QMouseEvent* event) Таким образом:

void ScatterView::mouseMoveEvent(QMouseEvent* event)
{
    if(!this->chart()->axisX() || !this->chart()->axisY())
    {
        return;
    }
    QPointF inPoint;
    QPointF chartPoint;
    inPoint.setX(event->x());
    inPoint.setY(event->y());
    chartPoint = chart()->mapToValue(inPoint);
    handleMouseMoved(chartPoint);
}

void ScatterView::handleMouseMoved(const QPointF &point)
{
    QPointF mousePoint = point;
    qreal distance(0.2); //distance from mouse to point in chart axes
    foreach (QPointF currentPoint, scatterSeries->points()) { 
        qreal currentDistance = qSqrt((currentPoint.x() - mousePoint.x())
                                      * (currentPoint.x() - mousePoint.x())
                                      + (currentPoint.y() - mousePoint.y())
                                      * (currentPoint.y() - mousePoint.y()));
        if (currentDistance < distance) {
            triggerPoint(currentPoint);
        }
    }
}
Другие вопросы по тегам