0

我需要在 QwtPlot 绘图区域(不是整个小部件!)上获取鼠标单击的 x 和 y 坐标。问题是bool event(QEvent*)每个事件都只调用一个方法。我找到了一些解决方案(http://www.qtcentre.org/archive/index.php/t-9502.html),使用 QwtPlotPicker 但这对我不起作用,我使用的是 Qwt 6 并且有没有像setSelectionState().

QwtPlot绘图区鼠标点击事件的实现方法有哪些?

4

2 回答 2

1

与 5 相比,Qwt 6 发生了一些变化。

现在我们需要使用QwtPlotPicker::setStateMachine(QwtPickerMachine)方法设置状态机。有几个选项(派生类):

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

取决于我们的需要。

接下来我们需要做的是使用我们的自定义插槽connect()发出信号,我们可以在其中获取 x 和 y 坐标或其他有趣的数据。selected(...)QwtPlotPicker

于 2013-04-02T09:51:02.943 回答
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::setCanvas 在 QwtPlot 上设置画布。然后 SpecialMapPlotCanvas::plot() 为您提供了对拥有的 QwtPlot 的引用,其 invTransform 方法可用于将点击坐标转换为绘图值。如果您在 QwtPlot 本身上使用鼠标事件,您会得到错误的答案,因为这里的鼠标事件坐标与整个 QwtPlot 小部件区域(如您所说)相关,而不仅仅是画布。

于 2017-03-31T23:48:20.863 回答