非常抱歉,之前的回答有误。在 QPainterPath
的二次曲线中,并没有 cp2x
和 cp2y
控制点。
对于二次曲线,控制点信息存储在 QPainterPathElement::x
和 QPainterPathElement::y
中。具体来说,每个二次曲线由一个起点、一个控制点和一个终点组成。
要缩放二次曲线,可以使用类似的方法:
void scalePathItem(QGraphicsPathItem* item, qreal scaleFactor)
{
// 获取中心点坐标
QPointF center = item->boundingRect().center();
// 平移路径段和控制点到原点
QPainterPath path = item->path();
path.translate(-center);
// 放大路径段和控制点坐标
for (int i = 0; i < path.elementCount(); ++i)
{
QPainterPath::Element& element = path.elementAt(i);
if (element.isMoveTo() || element.isLineTo())
{
element.x *= scaleFactor;
element.y *= scaleFactor;
}
else if (element.isCurveTo())
{
element.x *= scaleFactor;
element.y *= scaleFactor;
element.x1 *= scaleFactor;
element.y1 *= scaleFactor;
}
}
// 将路径段和控制点恢复到原来的位置
path.translate(center);
// 更新 QGraphicsPathItem 的路径
item->setPath(path);
}
这样做可以正确地缩放二次曲线,在保持其形状的同时进行缩放。再次对之前的回答中的错误表示歉意。
内容由零声教学AI助手提供,问题来源于学员提问