我需要在 QwtPlot 绘图区域(不是整个小部件!)上获取鼠标单击的 x 和 y 坐标。问题是bool event(QEvent*)
每个事件都只调用一个方法。我找到了一些解决方案(http://www.qtcentre.org/archive/index.php/t-9502.html),使用 QwtPlotPicker 但这对我不起作用,我使用的是 Qwt 6 并且有没有像setSelectionState()
.
QwtPlot绘图区鼠标点击事件的实现方法有哪些?
我需要在 QwtPlot 绘图区域(不是整个小部件!)上获取鼠标单击的 x 和 y 坐标。问题是bool event(QEvent*)
每个事件都只调用一个方法。我找到了一些解决方案(http://www.qtcentre.org/archive/index.php/t-9502.html),使用 QwtPlotPicker 但这对我不起作用,我使用的是 Qwt 6 并且有没有像setSelectionState()
.
QwtPlot绘图区鼠标点击事件的实现方法有哪些?
与 5 相比,Qwt 6 发生了一些变化。
现在我们需要使用QwtPlotPicker::setStateMachine(QwtPickerMachine)
方法设置状态机。有几个选项(派生类):
QwtPickerClickPointMachine
QwtPickerClickRectMachine
QwtPickerDragPointMachine
QwtPickerDragRectMachine
QwtPickerPolygonMachine
QwtPickerTrackerMachine
取决于我们的需要。
接下来我们需要做的是使用我们的自定义插槽connect()
发出信号,我们可以在其中获取 x 和 y 坐标或其他有趣的数据。selected(...)
QwtPlotPicker
我正在使用 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::setCanvas 在 QwtPlot 上设置画布。然后 SpecialMapPlotCanvas::plot() 为您提供了对拥有的 QwtPlot 的引用,其 invTransform 方法可用于将点击坐标转换为绘图值。如果您在 QwtPlot 本身上使用鼠标事件,您会得到错误的答案,因为这里的鼠标事件坐标与整个 QwtPlot 小部件区域(如您所说)相关,而不仅仅是画布。