有没有办法在绘图区域上获得鼠标坐标QChartView?优选地,在轴单元中.目标是在绘图上移动鼠标时显示鼠标坐标,以便用户可以测量绘制的对象.
我找不到任何内置函数QChartView,所以我试图QChartView::mouseMoveEvent(QMouseEvent *event)用来尝试计算绘图区域中的结果位置.问题是我无法获得绘图区域坐标系的任何参考.我已经尝试过使用了mapToScene,mapToItem而且mapToParent反过来mapFrom...我可以抓住所有对象试图做到这一点,但无济于事.
我发现这QChartView::chart->childItems()[2]确实是绘图区域,不包括轴和轴标签.然后,我可以调用QChartView::chart->childItems()[2]->setCursor(Qt::CrossCursor)十字形仅出现在绘图区域而不是相邻对象上.但是,我尝试的任何东西似乎都没有正确引用这个对象的坐标系.
QChartView只是一个QGraphicsView嵌入式的scene().要获取任何图表中的坐标,您必须经历多个坐标转换:
view->mapToScene:widget(视图)坐标→场景坐标chart->mapFromScene:场景坐标→图表项目坐标chart->mapToValue:图表项目坐标→给定系列中的值.术语"图表项"和"图表小部件"是同义词,因为QChartis-a QGraphicsWidget是-a QGraphicsItem.请注意,QGraphicsWidget是不是一个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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2743 次 |
| 最近记录: |