有没有办法在 QChartView 的绘图区域上获取鼠标的坐标?最好以轴为单位。目标是在绘图上移动鼠标时显示鼠标的坐标,以便用户可以测量绘制的对象。

我在 QChartView 上找不到任何内置函数,所以我尝试使用 QChartView::mouseMoveEvent(QMouseEvent *event) 来尝试计算绘图区域中的结果位置。问题是我无法获得对绘图区域坐标系的任何引用。
我试过在所有对象上使用 mapToScenemapToItemmapToParent 以及相反的 mapFrom... 我可以捕获这个,但无济于事。

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

最佳答案

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

  • 从 View 小部件坐标
  • 开始
  • view->mapToScene:小部件( View )坐标→场景坐标
  • chart->mapFromScene:场景坐标→图表项目坐标
  • chart->mapToValue:图表项目坐标→给定系列中的值。
  • 以给定系列中的值坐标结束。

  • 术语“图表项目”和“图表小部件”是同义词,因为 QChart is-a QGraphicsWidget is-a 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;
    

    关于c++ - 在 QChartView 的轴系中获取鼠标坐标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44067831/

    10-17 02:03