Получить координаты мыши в системе координат QChartView
Есть ли способ получить координаты мыши в области построения графика QChartView
? Желательно в осевых единицах. Цель состоит в том, чтобы отображать координаты мыши при перемещении мыши по графику, чтобы пользователь мог измерить нанесенные объекты.
Я не мог найти встроенную функцию для этого на QChartView
вот и пытаюсь использовать QChartView::mouseMoveEvent(QMouseEvent *event)
попытаться вычислить результирующую позицию в области построения. Проблема в том, что я не могу получить какую-либо ссылку на систему координат области графика. Я пытался использовать mapToScene
, mapToItem
а также mapToParent
а также наоборот mapFrom...
на все объекты я могу ухватиться, чтобы попытаться сделать это, но безрезультатно.
Я нашел это QChartView::chart->childItems()[2]
действительно область построения, исключая метки оси и оси. Я могу тогда позвонить QChartView::chart->childItems()[2]->setCursor(Qt::CrossCursor)
сделать так, чтобы крест появлялся только в области построения, а не на соседних объектах. Но, тем не менее, ничто из того, что я пытаюсь сделать, не дает правильной ссылки на систему координат этого объекта.
1 ответ
QChartView
это просто QGraphicsView
со встроенным scene()
, Чтобы получить координаты в любом из графиков, вы должны пройти несколько преобразований координат:
- Начнем с просмотра координат виджета
view->mapToScene
: координаты виджета (вида) → координаты сценыchart->mapFromScene
: координаты сцены → координаты элемента диаграммыchart->mapToValue
: координаты элемента диаграммы → значение в данной серии.- Конец значения координаты в данной серии.
Термины "элемент диаграммы" и "виджет диаграммы" являются синонимами, поскольку QChart
это QGraphicsWidget
это QGraphicsItem
, Обратите внимание, что QGraphicsWidget
это не QWidget
!