在QChartView的轴系中获取鼠标坐标
Get mouse coordinates in QChartView's axis system
有没有办法在 QChartView
的绘图区域获取鼠标坐标?最好以轴为单位。目标是在绘图上移动鼠标时显示鼠标坐标,以便用户可以测量绘图对象。
我在 QChartView
上找不到任何内置函数,所以我尝试使用 QChartView::mouseMoveEvent(QMouseEvent *event)
来尝试计算绘图区域中的结果位置。问题是我无法获得对绘图区域坐标系的任何参考。
我已经尝试使用 mapToScene
、mapToItem
和 mapToParent
以及相反的 mapFrom...
对我可以抓住的所有对象尝试这样做,但无济于事.
我发现 QChartView::chart->childItems()[2]
确实是绘图区域,不包括轴和轴标签。然后我可以调用 QChartView::chart->childItems()[2]->setCursor(Qt::CrossCursor)
使十字仅出现在绘图区域而不出现在相邻的对象上。但是,我尝试的任何事情似乎都无法正确引用该对象的坐标系。
QChartView
只是一个带有嵌入式 scene()
的 QGraphicsView
。要获取任何图表中的坐标,您必须经过多次坐标转换:
- 从视图小部件坐标开始
view->mapToScene
:widget(视图)坐标→场景坐标
chart->mapFromScene
:场景坐标→图表项坐标
chart->mapToValue
:图表项目坐标 → 给定系列中的值。
- 以给定系列中的值坐标结束。
术语 "chart item" 和 "chart widget" 是同义词,因为 QChart
是一个 QGraphicsWidget
是一个 QGraphicsItem
。请注意 QGraphicsWidget
是 而不是 和 QWidget
!
像这样实施它就像一个魅力(谢谢,Marcel!):
auto const widgetPos = event->localPos();
auto const scenePos = mapToScene(QPoint(static_cast<int>(widgetPos.x()), static_cast<int>(widgetPos.y())));
auto const chartItemPos = chart()->mapFromScene(scenePos);
auto const valueGivenSeries = chart()->mapToValue(chartItemPos);
qDebug() << "widgetPos:" << widgetPos;
qDebug() << "scenePos:" << scenePos;
qDebug() << "chartItemPos:" << chartItemPos;
qDebug() << "valSeries:" << valueGivenSeries;
有没有办法在 QChartView
的绘图区域获取鼠标坐标?最好以轴为单位。目标是在绘图上移动鼠标时显示鼠标坐标,以便用户可以测量绘图对象。
我在 QChartView
上找不到任何内置函数,所以我尝试使用 QChartView::mouseMoveEvent(QMouseEvent *event)
来尝试计算绘图区域中的结果位置。问题是我无法获得对绘图区域坐标系的任何参考。
我已经尝试使用 mapToScene
、mapToItem
和 mapToParent
以及相反的 mapFrom...
对我可以抓住的所有对象尝试这样做,但无济于事.
我发现 QChartView::chart->childItems()[2]
确实是绘图区域,不包括轴和轴标签。然后我可以调用 QChartView::chart->childItems()[2]->setCursor(Qt::CrossCursor)
使十字仅出现在绘图区域而不出现在相邻的对象上。但是,我尝试的任何事情似乎都无法正确引用该对象的坐标系。
QChartView
只是一个带有嵌入式 scene()
的 QGraphicsView
。要获取任何图表中的坐标,您必须经过多次坐标转换:
- 从视图小部件坐标开始
view->mapToScene
:widget(视图)坐标→场景坐标chart->mapFromScene
:场景坐标→图表项坐标chart->mapToValue
:图表项目坐标 → 给定系列中的值。- 以给定系列中的值坐标结束。
术语 "chart item" 和 "chart widget" 是同义词,因为 QChart
是一个 QGraphicsWidget
是一个 QGraphicsItem
。请注意 QGraphicsWidget
是 而不是 和 QWidget
!
像这样实施它就像一个魅力(谢谢,Marcel!):
auto const widgetPos = event->localPos();
auto const scenePos = mapToScene(QPoint(static_cast<int>(widgetPos.x()), static_cast<int>(widgetPos.y())));
auto const chartItemPos = chart()->mapFromScene(scenePos);
auto const valueGivenSeries = chart()->mapToValue(chartItemPos);
qDebug() << "widgetPos:" << widgetPos;
qDebug() << "scenePos:" << scenePos;
qDebug() << "chartItemPos:" << chartItemPos;
qDebug() << "valSeries:" << valueGivenSeries;