2013-05-07 124 views
1

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

但pointSelected槽被调用每一次我在QwtPlot点击,而不是只在一个曲线

BTW的时候,我也尝试将槽连接到信号QwtPlotPicker::selected(const QVector &pa)但它从未发射...

回答

1

我认为使用CanvasPicker更方便,因为它带有示例,并且可以轻松扩展。

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

picker = new CanvasPicker(plot); // plot is a pointer to your instance of QwtPlot 

你会看到该事件过滤器安装在的CanvasPicker构造函数初始化它在你的类。

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

相关问题