QwtPlot如何选择点(s)曲线

时间:2013-05-07 19:37:54

标签: qt plot qwt

我有一个包含一些曲线的QwtPlot,我希望能够从这些曲线中获取选定的点(和曲线指针):通过单击并通过拖动矩形选择点来选择一个点。

我使用以下代码:

// Picker with click point machine to provide point selection
QwtPlotPicker* clickPicker = new QwtPlotPicker(this->canvas());
clickPicker->setStateMachine(new QwtPickerClickPointMachine);
clickPicker->setMousePattern(0,Qt::LeftButton,Qt::SHIFT);
connect(clickPicker, SIGNAL(appended(QPointF)),
        this, SLOT(pointSelected(QPointF)));

// Picker with drag rect machine to provide multiple points selection
QwtPlotPicker* rectPicker = new QwtPlotPicker(
            this->xBottom, this->yLeft, QwtPicker::RectRubberBand,
            QwtPicker::AlwaysOff, this->canvas());
QwtPickerDragRectMachine* test = new QwtPickerDragRectMachine();
test->setState(QwtPickerMachine::RectSelection);
rectPicker->setStateMachine(test);
connect(rectPicker, SIGNAL(selected(QRectF)),
        this, SLOT(pointsSelected(QRectF)));

但是每次点击QwtPlot时都会调用pointSelected插槽而不仅仅是在曲线上

顺便说一下,我也尝试将一个插槽连接到信号QwtPlotPicker::selected(const QVector &pa),但它永远不会发光......

1 个答案:

答案 0 :(得分:1)

我认为使用示例附带的CanvasPicker会更方便,并且可以轻松扩展。

请查看Qwt附带的event_filter。您应该使用类CanvasPicker(它不是Qwt API的一部分,但您可以在示例中找到代码)。 您可以使用

在类中实例化它
    picker = new CanvasPicker(plot); // plot is a pointer to your instance of QwtPlot

您将看到事件过滤器安装在CanvasPicker

的构造函数中

现在看一下在QwtPlot的事件循环中发生事件时调用的CanvasPicker :: eventFilter(QObject * object,QEvent * e)。在switch结构中实现你的应用程序逻辑,f.i。更改case QEvent::MouseMove: