Qt QXYSeries和ChartView -修改悬停行为在一个范围内触发

Qt QXYSeries and ChartView - modify hovered behavior to trigger within a range

本文关键字:一个 范围内 ChartView QXYSeries 修改 悬停 Qt      更新时间:2023-10-16

我有一个散点图,由QXYSeries表示,并使用Qt Charts 5.7中的ChartView查看。

我想将鼠标悬停在绘图上,在一定距离内触发"悬停",而不是仅当我的光标直接位于一个点的顶部时。想象一下鼠标周围有一个圆圈,每当系列的任何部分在它里面时,它就会触发悬停。

有办法得到这个行为吗?

最终,我通过创建一个继承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);
        }
    }
}