有没有办法在QChartView
的绘图区域上获取鼠标坐标?优选地,在轴单元中。目标是在绘图上移动鼠标时显示鼠标坐标,以便用户可以测量绘制的对象。
我无法在QChartView
上找到任何内置函数,因此我尝试使用QChartView::mouseMoveEvent(QMouseEvent *event)
来尝试计算绘图区域中的结果位置。问题是我无法参考绘图区域的坐标系。
我已尝试使用mapToScene
,mapToItem
和mapToParent
以及反向mapFrom...
对所有可以抓住的对象尝试执行此操作,但是没有用。
我发现QChartView::chart->childItems()[2]
确实是绘图区域,不包括轴和轴标签。然后,我可以调用QChartView::chart->childItems()[2]->setCursor(Qt::CrossCursor)
使十字形仅出现在绘图区域而不是相邻对象上。但是,我仍然没有尝试过对这个物体坐标系的正确引用。
答案 0 :(得分:7)
QChartView
只是QGraphicsView
,内嵌scene()
。要获取任何图表中的坐标,您必须经历多个坐标转换:
view->mapToScene
:小部件(视图)坐标→场景坐标chart->mapFromScene
:场景坐标→图表项坐标chart->mapToValue
:图表项目坐标→给定系列中的值。术语“图表项目”和“图表窗口小部件”是同义词,因为QChart
是一个QGraphicsWidget
是一个QGraphicsItem
。请注意,QGraphicsWidget
不 a QWidget
!
像这样实现它就像一个魅力(谢谢,马塞尔!):
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;