gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:27:18 28 4
gpt4 key购买 nike

我有一个由 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);
}
}
}

关于c++ - Qt QXYSeries 和 ChartView - 修改悬停行为以在一个范围内触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40271339/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com