玩转Qt 2D绘图:填充规则详解与实战案例(第3部分)
最编程
2024-02-13 21:01:12
...
程序示例一:
QPainter painter(this);
QPainterPath path;
path.moveTo(50, 250);
path.lineTo(50, 230);
//从当前点到点(120, 60)之间绘制一条三次贝塞尔曲线
path.cubicTo(QPointF(105, 40), QPointF(115, 80), QPointF(120, 60));
path.lineTo(130, 130);
//添加一个椭圆
path.addEllipse(QPoint(130, 130), 30, 30);
painter.setPen(Qt::darkYellow);
//绘制路径
painter.drawPath(path);
//平移坐标系统后重新绘制路径
path.translate(200, 0);
painter.setPen(Qt::darkBlue);
painter.drawPath(path);
执行结果:
程序示例二:
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPainterPath path;
path.addEllipse(10, 50, 100, 100);
path.addRect(50, 100, 100, 100);
painter.setBrush(Qt::cyan);
painter.drawPath(path);
painter.translate(180, 0);
path.setFillRule(Qt::WindingFill);
painter.drawPath(path);
}
执行结果:
先绘制了一个包含相交的椭圆和矩形的路径,因为没有显示指定填充规则,则默认使用Qt::OddEventFill规则。然后将路径进行平移,重新使用Qt::WindingFill规则绘制了该路径。