2016-10-26 12 views
0

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

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

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

ответ

0

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

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); 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^