Событие щелчка мышью QwtPlot

Мне нужно получить координаты x и y щелчка мышью в области рисования QwtPlot (не весь виджет!). Проблема в том, что есть только метод bool event(QEvent*) это называется на каждом событии. Я нашел несколько решений (http://www.qtcentre.org/archive/index.php/t-9502.html), используя QwtPlotPicker, но это не работает для меня, я использую Qwt 6, и нет таких методов, как setSelectionState(),

Каковы другие способы достижения событий щелчка мышью в области рисования в QwtPlot?

0

Решение

В Qwt 6 произошли некоторые изменения по сравнению с 5.

Теперь нам нужно установить конечный автомат, используя QwtPlotPicker::setStateMachine(QwtPickerMachine) метод. Есть несколько вариантов (производные классы):

  • QwtPickerClickPointMachine
  • QwtPickerClickRectMachine
  • QwtPickerDragPointMachine
  • QwtPickerDragRectMachine
  • QwtPickerPolygonMachine
  • QwtPickerTrackerMachine

в зависимости от наших потребностей.

Следующее, что нам нужно сделать, это connect() сигнал selected(...) от QwtPlotPicker с нашим пользовательским слотом, где мы можем получить координаты X и Y или другие интересные данные.

0

Другие решения

Я фиксирую события мыши, используя методы событий мыши в подклассе QwtPlotCanvas, и использую методы преобразования в QwtPlot, чтобы отобразить координаты событий мыши x и y на значения, которые они представляют на графике.

Создайте подкласс QwtPlotCanvas и переопределите метод mousePressEvent следующим образом.

void SpecialMapPlotCanvas::mousePressEvent (QMouseEvent* event) {
QWidget::mousePressEvent (event);
double x = plot() -> invTransform (plot() -> xBottom, event -> pos().x());
double y = plot() -> invTransform (plot() -> yLeft, event -> pos().y());
std::cout << "Values " << x << " " << y << "\n";
}

Затем установите холст на QwtPlot, создав экземпляр объекта этого класса и передав его в QwtPlot :: setCanvas. Затем SpecialMapPlotCanvas :: plot () дает вам ссылку на владелец QwtPlot, и его методы invTransform можно использовать для преобразования координат щелчка в значения графика. Если вы используете события мыши на самом QwtPlot, вы получите неправильные ответы, потому что координаты события мыши здесь относятся ко всей области виджета QwtPlot (как вы говорите), а не только к холсту.

0

По вопросам рекламы [email protected]