1

いくつかの曲線を含む 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)に接続しようとしましたが、決して放出されません...

4

1 に答える 1

1

CanvasPickerサンプルも付いていて拡張も容易なので、の方が使いやすいと思います。

event_filterQwt に付属の をご覧ください。クラスを使用する必要があります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 コンストラクト fi change に実装しますcase QEvent::MouseMove:

于 2013-05-29T11:30:21.613 に答える