带箭头的 QwtPlotCurve / QwtPainter
QwtPlotCurve with arrow / QwtPainter
我想画一个 QwtCurve,在曲线的末端有箭头。经过很长时间的搜索,我没有找到一个简单的方法来做到这一点。所以我想创建一个 class QwtPlotArrow
继承自 QwtPlotCurve
.
我覆盖了 QwtPlotCurve
的 drawCurve()
函数,并尝试使用 QwtPainter::drawLine()
函数在我的绘图上画一条线。我这样做是这样的:
QwtPainter::drawLine(painter, 2, 2, -2, -2);
在覆盖函数结束时我调用
QwtPlotCurve::drawCurve(painter, style, xMap, yMap, canvasRect, from, to);
执行QwtPlotCurve
的drawCurve()
函数。
大多数事情都运行良好。调用了QwtPlotArrow
的drawCurve()
函数,之后甚至执行了QwtPlotCurve
的drawCurve()
函数。但是图上没有画出 (2,2) 到 (-2,-2) 的线形。
这意味着,我在执行此命令时出错了:
QwtPainter::drawLine(painter, 2, 2, -2, -2);
此命令不会绘制线条到绘图。即使在 QwtPlotCurve
的源代码中,我也找不到线条是如何绘制的。对我来说,上面的命令看起来是正确的。
我做错了什么?
我不确定,但我认为问题在于坐标必须映射到绘图。我仍然不知道如何使用
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);
}
我想画一个 QwtCurve,在曲线的末端有箭头。经过很长时间的搜索,我没有找到一个简单的方法来做到这一点。所以我想创建一个 class QwtPlotArrow
继承自 QwtPlotCurve
.
我覆盖了 QwtPlotCurve
的 drawCurve()
函数,并尝试使用 QwtPainter::drawLine()
函数在我的绘图上画一条线。我这样做是这样的:
QwtPainter::drawLine(painter, 2, 2, -2, -2);
在覆盖函数结束时我调用
QwtPlotCurve::drawCurve(painter, style, xMap, yMap, canvasRect, from, to);
执行QwtPlotCurve
的drawCurve()
函数。
大多数事情都运行良好。调用了QwtPlotArrow
的drawCurve()
函数,之后甚至执行了QwtPlotCurve
的drawCurve()
函数。但是图上没有画出 (2,2) 到 (-2,-2) 的线形。
这意味着,我在执行此命令时出错了:
QwtPainter::drawLine(painter, 2, 2, -2, -2);
此命令不会绘制线条到绘图。即使在 QwtPlotCurve
的源代码中,我也找不到线条是如何绘制的。对我来说,上面的命令看起来是正确的。
我做错了什么?
我不确定,但我认为问题在于坐标必须映射到绘图。我仍然不知道如何使用
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);
}