2013-05-07 4 views
1

일부 곡선이 포함 된 QwtPlot이 있는데이 곡선에서 선택한 점 (및 곡선 포인터)을 얻고 싶습니다. 클릭하여 점을 선택하십시오. rect를 드래그하여 점을 선택하십시오. 나는 또한에 슬롯을 연결을 시도, 나는 QwtPlot를 클릭뿐만 아니라QwtPlot 점 곡선을 선택하는 방법

BTW 곡선의 모든 시간이라고

// 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 슬롯 :

나는 다음과 같은 코드를 사용 신호 QwtPlotPicker::selected(const QVector &pa)하지만 결코 방출되지 않습니다 ...

답변

1

CanvasPicker을 사용하는 것이 더 편리하다고 생각하며 쉽게 확장 할 수 있습니다.

Qwt와 함께 제공되는 event_filter을 살펴보십시오. CanvasPicker 클래스를 사용해야합니다 (Qwt API의 일부는 아니지만 예제에서는 코드를 찾을 수 있습니다). 당신은 당신은 이벤트 필터가 CanvasPicker의 생성자에 설치되어있는 것을 볼 수 있습니다

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

를 사용하여 클래스를 인스턴스화 할 수 있습니다.

이벤트 루프가 QwtPlot 일 때 호출 될 CanvasPicker :: eventFilter (QObject * object, QEvent * e)를 살펴 보겠습니다. 스위치 구성, f.i에서 응용 프로그램 논리를 구현하십시오. case QEvent::MouseMove:을 변경하십시오.

관련 문제