首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QChartView的轴系统中获取鼠标坐标

在QChartView的轴系统中获取鼠标坐标
EN

Stack Overflow用户
提问于 2017-05-19 10:35:42
回答 1查看 5.9K关注 0票数 12

是否有一种方法可以获得鼠标的坐标在绘图面积的QChartView?最好在轴单元中。目标是显示鼠标的坐标,同时在地图上移动鼠标,这样用户就可以测量绘制的对象。

我在QChartView上找不到任何内置的函数,所以我尝试使用QChartView::mouseMoveEvent(QMouseEvent *event)来计算绘图区域中的结果位置。问题是,我无法得到任何关于地块坐标系的参考。我尝试过在所有可以抓到的对象上使用mapToScenemapToItemmapToParent以及反向mapFrom...来尝试这样做,但没有效果。

我发现QChartView::chart->childItems()[2]确实是绘图区域,不包括轴和轴标签。然后,我可以调用QChartView::chart->childItems()[2]->setCursor(Qt::CrossCursor),使交叉只出现在绘图区域,而不是在相邻的对象上。但是,我尝试的任何东西似乎都没有对这个物体的坐标系做出正确的引用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-19 20:29:02

QChartView只是一个带有嵌入式scene()QGraphicsView。要获得任何图表中的坐标,您必须经过几个坐标转换:

  1. 从视图小部件坐标开始
  2. view->mapToScene:小部件(视图)坐标→场景坐标
  3. chart->mapFromScene:场景坐标→图表项目坐标
  4. chart->mapToValue:给定系列中的图表项坐标→值。
  5. 以给定序列中的值坐标结束。

术语“图表项”和“图表小部件”是同义词,因为QChart是-a QGraphicsWidget is-a QGraphicsItem。注意,QGraphicsWidget而不是a QWidget

像这样实现它就像一种魅力(谢谢,Marcel!):

代码语言:javascript
复制
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;
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44067831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档