Мне нужно получить координаты x и y щелчка мышью в области рисования QwtPlot (не весь виджет!). Проблема в том, что есть только метод bool event(QEvent*)
это называется на каждом событии. Я нашел несколько решений (http://www.qtcentre.org/archive/index.php/t-9502.html), используя QwtPlotPicker, но это не работает для меня, я использую Qwt 6, и нет таких методов, как setSelectionState()
,
Каковы другие способы достижения событий щелчка мышью в области рисования в QwtPlot?
В Qwt 6 произошли некоторые изменения по сравнению с 5.
Теперь нам нужно установить конечный автомат, используя QwtPlotPicker::setStateMachine(QwtPickerMachine)
метод. Есть несколько вариантов (производные классы):
QwtPickerClickPointMachine
QwtPickerClickRectMachine
QwtPickerDragPointMachine
QwtPickerDragRectMachine
QwtPickerPolygonMachine
QwtPickerTrackerMachine
в зависимости от наших потребностей.
Следующее, что нам нужно сделать, это connect()
сигнал selected(...)
от QwtPlotPicker
с нашим пользовательским слотом, где мы можем получить координаты X и Y или другие интересные данные.
Я фиксирую события мыши, используя методы событий мыши в подклассе 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 (как вы говорите), а не только к холсту.