Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在QChartView'中获取鼠标坐标;s轴系统_C++_Qt_Qtcharts - Fatal编程技术网

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-a
    QGraphicsWidget
    is-a
    QGraphicsItem
    。请注意,
    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;