qwtplotmarker实现特征点效果

网上说qwtplotmarker标签可以自定义任何形状,我想实现以qwtplotcurve曲线画出的某一个点为中心做一个圆形,或者是矩形。类似于特征点标注。不知道是不是个人理解问题,实际上无法实现我想要的功能。因为不知道难度,暂时悬赏5元,若难度较高,会追加。效果图如下所示。另,本人用的是qt5.6.2版本。qwt 6.1.4版本。

img

根据您的需求描述和效果图,可以使用QwtPlotMarker进行自定义绘制。您可以通过继承QwtSymbol类来创建自己的符号,然后在QwtPlotMarker中设置该符号并指定位置。

以下是一个简单的示例,通过继承QwtSymbol实现一个圆形符号:

class CircleSymbol: public QwtSymbol
{
public:
    CircleSymbol()
    {
        setSize(QSize(10, 10));
    }

    virtual void drawSymbol(QPainter *painter, const QPointF &center) const
    {
        painter->drawEllipse(center, 5, 5);
    }
};

然后在需要显示标记的地方,使用QwtPlotMarker进行绘制:

// 创建曲线和数据
QwtPlotCurve *curve = new QwtPlotCurve("Curve");
QVector<QPointF> points;
points << QPointF(1.0, 2.0) << QPointF(2.0, 3.0) << QPointF(3.0, 4.0);
curve->setSamples(points);

// 创建标记并设置符号和位置
QwtPlotMarker *marker = new QwtPlotMarker();
marker->setSymbol(new CircleSymbol());
marker->setValue(QPointF(2.0, 3.0));

// 添加曲线和标记到绘图区域
curve->attach(plot);
marker->attach(plot);


这个示例中,我们先创建了一个QwtPlotCurve对象,同时添加了一些数据点。然后基于CircleSymbol类实现了一个圆形符号,并将其设置到QwtPlotMarker对象上。最后,我们将QwtPlotCurve和QwtPlotMarker对象都附加到QwtPlot对象中,即可在绘图区域上显示出来。

您可以根据需要修改CircleSymbol类的实现,以绘制不同形状的符号,例如矩形等。希望这可以帮助到您,如果您有任何其他问题,请随时问我。