Получить координаты мыши в системе координат 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(), Чтобы получить координаты в любом из графиков, вы должны пройти несколько преобразований координат:

  1. Начнем с просмотра координат виджета
  2. view->mapToScene: координаты виджета (вида) → координаты сцены
  3. chart->mapFromScene: координаты сцены → координаты элемента диаграммы
  4. chart->mapToValue: координаты элемента диаграммы → значение в данной серии.
  5. Конец значения координаты в данной серии.

Термины "элемент диаграммы" и "виджет диаграммы" являются синонимами, поскольку QChart это QGraphicsWidget это QGraphicsItem, Обратите внимание, что QGraphicsWidget это не QWidget!

Другие вопросы по тегам