Qt绘制和填充

1. 基本图形的绘制例程和代码

在这里插入图片描述

void Widget::paintEvent(QPaintEvent *event)
{

    //==========图形绘制=============
    //第一种
    QPainter painter(this);   //构造函数直接指定绘制设备
    painter.drawLine(QPoint(0,0),QPoint(100,100));

    //第二种
    //QPainter painter;
    //painter.begin(this);    //指定绘制设备
    //painter.drawLine(QPoint(0,0),QPoint(100,100));
    //painter.end();          //结束绘制

    //==========使用画笔=============
    //创建画笔(画刷、线宽、画笔风格、画笔端点风格、画笔连接风格)
    QPen pen(Qt::green,5,Qt::DotLine,Qt::RoundCap,Qt::RoundJoin);
    //使用画笔
    painter.setPen(pen);
    QRectF rectangle(70.0,40.0,80.0,60.0);
    int startAngle = 30*16;
    int spanAngle =120*16;
    //绘制圆弧
    painter.drawArc(rectangle,startAngle,spanAngle);

    //==========使用画刷=============
    //重新设置画笔
    pen.setWidth(1);
    pen.setStyle(Qt::SolidLine);
    painter.setPen(pen);
    //绘制一个矩形
    painter.drawRect(160,20,50,40);
    //创建画刷
    QBrush brush(QColor(0,0,255),Qt::Dense4Pattern);
    painter.setBrush(brush);
    //绘制椭圆
    painter.drawEllipse(220,20,50,50);
    //设置纹理
    brush.setTexture(QPixmap("../mydrawing/flower.png"));
    //重新使用画刷
    painter.setBrush(brush);
    //定义四个点
    static const QPointF points[4] = {
        QPointF(220.0,130.0),
        QPointF(290.0,10.0),
        QPointF(370.0,30.0),
        QPointF(400.0,70.0)
    };
    //绘制多边形
    painter.drawPolygon(points,4);
    //使用画刷填充一个矩形区域
    painter.fillRect(QRect(10,100,100,60),QBrush(Qt::darkYellow));
    //擦除一个矩形区域的内容
    painter.eraseRect(QRect(50,120,50,20));

    //==========线性渐变=============
    QLinearGradient linearGradient(QPointF(40, 190), QPointF(70, 190));
    // 插入颜色
    linearGradient.setColorAt(0, Qt::yellow);
    linearGradient.setColorAt(0.5, Qt::red);
    linearGradient.setColorAt(1, Qt::green);
    // 指定渐变区域以外的区域的扩散方式
    linearGradient.setSpread(QGradient::RepeatSpread);
    // 使用渐变作为画刷
    painter.setBrush(linearGradient);
    painter.drawRect(10, 170, 90, 40);

    //==========辐射渐变=============
    QRadialGradient radialGradient(QPointF(200, 190), 50, QPointF(275, 200));
    radialGradient.setColorAt(0, QColor(255, 255, 100, 150));
    radialGradient.setColorAt(1, QColor(0, 0, 0, 50));
    painter.setBrush(radialGradient);
    painter.drawEllipse(QPointF(200, 190), 50, 50);

    //==========锥形渐变=============
    QConicalGradient conicalGradient(QPointF(350, 190), 60);
    conicalGradient.setColorAt(0.2, Qt::cyan);
    conicalGradient.setColorAt(0.9, Qt::black);
    painter.setBrush(conicalGradient);
    painter.drawEllipse(QPointF(350, 190), 50, 50);

    // 画笔使用线性渐变来绘制直线和文字
    painter.setPen(QPen(linearGradient,2));
    painter.drawLine(0, 280, 100, 280);
    painter.drawText(150, 280, tr("helloQt!"));

}

2. 绘制风格

2.1 画笔风格

在这里插入图片描述

2.2 画笔端点风格

在这里插入图片描述

2.3 画笔连接风格

在这里插入图片描述

2.4 画刷风格

在这里插入图片描述

2.5 线性渐变的3中扩散结果

在这里插入图片描述

2.6 辐射渐变的3种扩散结果

在这里插入图片描述

2.7 锥形渐变

在这里插入图片描述

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MechMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值