2017-05-19 28 views
5

QChartViewの描画領域にマウスの座標を取得する方法はありますか?好ましくは軸単位である。目的はプロット上でマウスを動かしながらマウスの座標を表示し、プロットされたオブジェクトを測定できるようにすることです。QChartViewの軸システムでマウス座標を取得

QChartViewには、このための組み込み関数が見つかりませんでしたので、QChartView::mouseMoveEvent(QMouseEvent *event)を使用してプロット領域の結果位置を計算しようとしています。問題は、プロットエリアの座標系への参照を取得できないことです。 私はmapToScene,mapToItemmapToParentと逆のmapFrom...を使ってみましたが、すべてのオブジェクトでこれをしようとすると持ちこたえることはできますが、役に立たないのです。

私は、QChartView::chart->childItems()[2]が実際に軸と軸のラベルを除いてプロット領域であることがわかりました。次に、QChartView::chart->childItems()[2]->setCursor(Qt::CrossCursor)と呼んで、隣接するオブジェクトではなく、プロット領域にのみ十字を表示させることができます。しかし、やはり私が試してみるものは、このオブジェクトの座標系を正確に参照しているようには見えません。

答えて

6

QChartViewは、scene()を埋め込んだ単純にQGraphicsViewです。チャートの任意の範囲内の座標を取得するには、いくつかの座標変換を通過する必要があります:ビューウィジェット座標と

  1. スタート
  2. view->mapToScene:シーン座標:シーンは
  3. chart->mapFromSceneを調整→ウィジェット(ビュー)座標→グラフアイテム座標
  4. chart->mapToValue:一連のグラフアイテムの座標→値。
  5. 指定された系列内の値の座標で終了します。 QChartは-ためQGraphicsWidgetは、QGraphicsItem

用語「チャート項目」および「チャートウィジェット」は、同義語です。 QGraphicsWidgetではなく、であり、QWidgetです。

+0

これは、座標マッピングの正しい組み合わせのようです。私がやったことは、QChartViewをサブクラス化し、直ちに実行された 'QChartView :: mouseMoveEvent()'の中で 'chart() - > mapToValue()'を実装することでした。サブクラス化はZoomingとPanningも実装するのに便利でした。 –

関連する問題