L'autore stesso dice here:
Un QwtPlotPicker ti dà la posizione corrente del mouse (a schermo e coordina trama). Quindi devi trovare i punti più vicini delle tue curve. Puoi utilizzare QwtPlotCurve :: closestPoint(), ma nella maggior parte dei casi puoi trovare un'implementazione molto più veloce a seconda delle caratteristiche dei tuoi dati. Quando è necessario confrontare la posizione del mouse con le linee tra i punti è necessario la posizione dei pixel di questi punti (utilizzare QwtPlot :: canvasMap). Forse guardando il CanvasPicker dell'esempio di eventfilter aiuta.
L'ho implementato nella mia classe, che è una sottoclasse di QwtPlot. Nel costruttore ho il seguente:
QwtPlotPicker* plotPicker = new QwtPlotPicker(this->xBottom, this->yLeft, QwtPicker::CrossRubberBand, QwtPicker::AlwaysOn, this->canvas());
QwtPickerMachine* pickerMachine = new QwtPickerClickPointMachine();
plotPicker->setStateMachine(pickerMachine);
connect(plotPicker, SIGNAL(selected(const QPointF&)), this, SLOT(onSelected(const QPointF&)));
Ora nella mia classe (dove il puntatore this si riferisce a) dovrei implementare lo slot onSelected(const QPointF&)
che darà coordina la trama.
fonte
2012-10-31 09:24:21