You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt中如何旋转QPainterPath内的椭圆以实现路径相减?

实现QPainterPath中椭圆的旋转与路径相减

要实现旋转QPainterPath内的椭圆并完成路径相减,核心是利用QTransform对路径做旋转变换,具体步骤如下:

1. 创建基础椭圆路径

先定义原始的椭圆路径:

QPainterPath originalPath;
originalPath.addEllipse(100, 100, 100, 100);

2. 对路径应用旋转变换

QPainterPath本身没有直接的rotate方法,但可以通过变换矩阵实现旋转。需要注意:默认旋转中心是坐标原点(0,0),如果要以椭圆自身中心旋转,需要先将路径平移到原点,旋转后再平移回原位置:

// 计算椭圆的中心坐标
QPointF ellipseCenter(100 + 50, 100 + 50); // 椭圆左上角(100,100),宽高100,中心为(150,150)

// 构建变换矩阵:平移到原点→旋转→平移回原中心
QTransform transform;
transform.translate(ellipseCenter.x(), ellipseCenter.y());
transform.rotate(45); // 旋转45度
transform.translate(-ellipseCenter.x(), -ellipseCenter.y());

// 应用变换得到旋转后的路径
QPainterPath rotatedPath = originalPath.transformed(transform);

3. 执行路径相减操作

Qt的QPainterPath提供subtracted()方法实现路径相减,直接传入要减去的路径即可:

// 定义用于相减的第二个椭圆路径(示例)
QPainterPath subtractPath;
subtractPath.addEllipse(120, 120, 80, 80);

// 完成相减:rotatedPath减去subtractPath,得到最终路径
QPainterPath finalPath = rotatedPath.subtracted(subtractPath);

4. 绘制最终路径

最后用QPainter绘制运算后的路径:

QPainter painter(this);
painter.drawPath(finalPath);

如果只是需要绘制旋转后的椭圆,也可以直接对QPainter设置变换,但如果要进行路径布尔运算(如相减),必须先通过transformed()得到旋转后的独立路径,再执行运算。


内容的提问来源于stack exchange,提问作者Leon Hausmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:22:02