C++ 在QChartView'中获取鼠标坐标;s轴系统
有没有办法在C++ 在QChartView'中获取鼠标坐标;s轴系统,c++,qt,qtcharts,C++,Qt,Qtcharts,有没有办法在QChartView的绘图区域获取鼠标坐标?最好以轴为单位。目标是在绘图上移动鼠标时显示鼠标坐标,以便用户可以测量绘图对象 我在QChartView上找不到任何用于此的内置函数,因此我尝试使用QChartView::mouseMoveEvent(QMouseEvent*事件)来尝试并计算打印区域中的结果位置。问题是我无法获得绘图区域坐标系的任何参考。 我已经尝试在所有我可以抓取的对象上使用mapToScene、mapToItem和mapToParent以及反向的mapFrom…来尝试
QChartView
的绘图区域获取鼠标坐标?最好以轴为单位。目标是在绘图上移动鼠标时显示鼠标坐标,以便用户可以测量绘图对象
我在QChartView
上找不到任何用于此的内置函数,因此我尝试使用QChartView::mouseMoveEvent(QMouseEvent*事件)
来尝试并计算打印区域中的结果位置。问题是我无法获得绘图区域坐标系的任何参考。
我已经尝试在所有我可以抓取的对象上使用mapToScene
、mapToItem
和mapToParent
以及反向的mapFrom…
来尝试这样做,但没有用
我发现
QChartView::chart->childItems()[2]
确实是绘图区域,不包括轴和轴标签。然后,我可以调用QChartView::chart->childItems()[2]->setCursor(Qt::CrossCursor)
使十字仅显示在绘图区域上,而不显示在相邻对象上。但是,我尝试的东西似乎都没有正确地引用这个对象的坐标系。QChartView
只是一个带有嵌入式场景()的QGraphicsView
。要获取任何图表中的坐标,必须进行几个坐标转换:
从视图小部件坐标开始
view->maptosene
:小部件(视图)坐标→ 场景坐标
图表->mapFromScene
:场景坐标→ 图表项目坐标
图表->映射值
:图表项坐标→ 给定序列中的值
以给定系列中的值坐标结束
术语“图表项”和“图表小部件”是同义词,因为QChart
is-aQGraphicsWidget
is-aQGraphicsItem
。请注意,QGraphicsWidget
不是QWidget
像这样实现它就像一种魅力(谢谢,Marcel!):
auto const widgetPos=event->localPos();
auto const scenePos=maptosene(QPoint(静态_-cast(widgetPos.x())、静态_-cast(widgetPos.y());
auto const chartItemPos=chart()->mapFromScene(scenePos);
auto const valueGivenSeries=chart()->mapToValue(chartItemPos);
qDebug()这似乎是坐标映射的正确组合。我最后做的是将QChartView子类化,并在QChartView::mouseMoveEvent()
中实现chart()->mapToValue()
,这很快就奏效了。子类化对于实现缩放和平移也很有用。
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;