【Qt】2D绘图之填充规则

00. 目录

01. 概述

绘制多边形的时候就提到了填充规则Qt::FillRule,填充路径时也要使用填充规则,这里一共有两个填充规则,分别是Qt::OddEventFill和Qt::WindingFill。其中Qt::OddEventFill使用的是奇偶填充规则,具体来说就是如果要判断一个点是否在图形中,那么可以从该点向图形外引一条水平线,如果该水平线与图形的交点的个数为奇数,那么该点就在图形中。这个规则是默认值,而Qt::WindingFill使用的是非零弯曲规则,具体来说就是,如果要判断一个点是否在图形中,那么可以从该点向图形外引一条水平线,如果该水平线与图形的边线相交,这个边线是顺时针绘制的,就标记为1;是逆时针绘制的就标记为-1。然后将所有的数值相加,如果结果不为0,那么该点就在图形中。

02. 开发环境

Windows系统:Windows10

Qt版本:Qt5.15或者Qt6

03. 程序示例

程序示例一:

    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规则绘制了该路径。

04. 预留

05. 附录

源码下载:【Qt】2D绘图之填充规则.rar

© 版权声明
THE END
喜欢就支持一下吧
点赞351 分享
love understands love; it needs no talk.
相爱的心息息相通,无需用言语倾诉
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容