Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 仅绘制QPaint路径bezier曲线的一部分_Qt_Bezier_Qpainterpath - Fatal编程技术网

Qt 仅绘制QPaint路径bezier曲线的一部分

Qt 仅绘制QPaint路径bezier曲线的一部分,qt,bezier,qpainterpath,Qt,Bezier,Qpainterpath,我只想绘制QPainter曲线路径的一部分。我的路径如下所示: QPointF p[4]; p[0] = QPoint(100, 200); p[1] = QPoint(200, 60); p[2] = QPoint(500, 180); p[3] = QPoint(600, 100); cPath.cubicTo(p[1], -a*p[0] + p[1] + a*p[2], a*p[1] + p[2] -a*p[3], p[2]); 现在,这绘制了如图1所示的路径 但是现在我只想画两个点

我只想绘制QPainter曲线路径的一部分。我的路径如下所示:

QPointF p[4];
p[0] = QPoint(100, 200);
p[1] = QPoint(200,  60);
p[2] = QPoint(500, 180);
p[3] = QPoint(600, 100);
cPath.cubicTo(p[1], -a*p[0] + p[1] + a*p[2], a*p[1] + p[2] -a*p[3], p[2]);
现在,这绘制了如图1所示的路径

但是现在我只想画两个点之间的曲线,比如说p(1)和p(2)


如何仅绘制贝塞尔曲线的一部分?

以下是我解决此问题的方法

我使用
QPainterPath::toSubpathPolygons
返回多边形列表,并获得
QPolygonF

const QMatrix m = QMatrix();
QPolygonF cPoly = cPath.cubicTo(p[1], -a*p[0] + p[1] + a*p[2], a*p[1] + p[2] -a*p[3], p[2]).toSubpathPolygons(m).first();
然后我迭代了这个
QPolygonF
,并检查了这个多边形中的点是否位于我想要的两个点之间。然后将这些点添加到新多边形

QPolygonF nPoly;
QPolygonF::iterator i;
for (i = cPoly.begin(); i != cPoly.end(); ++i){
    QPointF pnt = *i;
    if (pnt.rx() >= p[1].rx() && pnt.rx() <= p[2].rx())
    nPoly << pnt;
}
qpolygonfnpoly;
QPolygonF::迭代器i;
对于(i=cPoly.begin();i!=cPoly.end();++i){
QPointF pnt=*i;
如果(pnt.rx()>=p[1].rx()&&pnt.rx()