是否有一种方法可以获得鼠标的坐标在绘图面积的QChartView?最好在轴单元中。目标是显示鼠标的坐标,同时在地图上移动鼠标,这样用户就可以测量绘制的对象。
我在QChartView上找不到任何内置的函数,所以我尝试使用QChartView::mouseMoveEvent(QMouseEvent *event)来计算绘图区域中的结果位置。问题是,我无法得到任何关于地块坐标系的参考。我尝试过在所有可以抓到的对象上使用mapToScene、mapToItem和mapToParent以及反向mapFrom...来尝试这样做,但没有效果。
我发现QChartView::chart->childItems()[2]确实是绘图区域,不包括轴和轴标签。然后,我可以调用QChartView::chart->childItems()[2]->setCursor(Qt::CrossCursor),使交叉只出现在绘图区域,而不是在相邻的对象上。但是,我尝试的任何东西似乎都没有对这个物体的坐标系做出正确的引用。
发布于 2017-05-19 20:29:02
QChartView只是一个带有嵌入式scene()的QGraphicsView。要获得任何图表中的坐标,您必须经过几个坐标转换:
view->mapToScene:小部件(视图)坐标→场景坐标chart->mapFromScene:场景坐标→图表项目坐标chart->mapToValue:给定系列中的图表项坐标→值。术语“图表项”和“图表小部件”是同义词,因为QChart是-a QGraphicsWidget is-a QGraphicsItem。注意,QGraphicsWidget是而不是a 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;https://stackoverflow.com/questions/44067831
复制相似问题