如果你的 QPainterPath
中的元素是二次曲线(quadratic curve),那么它们不会有 cp1x
和 cp1y
控制点。在这种情况下,可以使用如下代码进行缩放:
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.cp2x *= scaleFactor;
element.cp2y *= scaleFactor;
}
}
// 将路径段和控制点恢复到原来的位置
path.translate(center);
// 更新QGraphicsPathItem的路径
item->setPath(path);
}
这样,即使没有 cp1x
和 cp1y
控制点,也能正确缩放二次曲线。
内容由零声教学AI助手提供,问题来源于学员提问