【问题标题】:QwtPlotCurve with arrow / QwtPainter带箭头的 QwtPlotCurve / QwtPainter
【发布时间】:2019-12-03 16:03:33
【问题描述】:

我想在曲线的末端绘制一个带有箭头的 QwtCurve。经过长时间的搜索,我没有找到一个简单的方法来做到这一点。所以我想创建一个继承自QwtPlotCurve 的类QwtPlotArrow

我覆盖了QwtPlotCurvedrawCurve() 函数并尝试使用QwtPainter::drawLine() 函数在我的绘图上画一条线。我这样做是这样的:

QwtPainter::drawLine(painter, 2, 2, -2, -2);

在我调用的覆盖函数结束时

QwtPlotCurve::drawCurve(painter, style, xMap, yMap, canvasRect, from, to);

执行QwtPlotCurvedrawCurve()函数。

大多数事情都运行良好。调用QwtPlotArrowdrawCurve() 函数,之后甚至执行QwtPlotCurvedrawCurve() 函数。但是图上没有画出 (2,2) 到 (-2,-2) 的线形。

这意味着,我对这个命令做错了:

QwtPainter::drawLine(painter, 2, 2, -2, -2);

此命令不会将线绘制到绘图。即使在QwtPlotCurve 的源代码中,我也找不到线条是如何绘制的。对我来说,上面的命令似乎是正确的。

我做错了什么?

【问题讨论】:

    标签: c++ qt qwt


    【解决方案1】:

    我不确定,但我认为问题在于,坐标必须映射到绘图。我还是不知道该怎么做

    QwtPainter::drawLine(QPainter, 2, 2, -2, -2);
    

    但你可以这样做

    QwtPainter::drawPolyline()
    

    因此你必须创建一个QwtPointSeriesData 对象。您可以使用QwtPointMapper 对象将其映射到绘图。

    例子:

    void QwtPlotArrow::drawCurve(QPainter *painter, int style, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect, int from, int to) const
    {
        QwtPointSeriesData* mySeries = new QwtPointSeriesData();
        mySeries->setSamples(QVector<QPointF>() << QPointF(2, 2) << QPointF(-2, -2);
    
        QwtPainter::drawPolyline(painter, QwtPointMapper().toPolygonF(xMap, yMap, mySeries, from, to));
    
        //Don't forget to execute the drawCurve function from QwtPlotCurve
        QwtPlotCurve::drawCurve(painter, style, xMap, yMap, canvasRect, from, to);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-11
      • 1970-01-01
      • 2018-08-26
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      相关资源
      最近更新 更多