Qt之图形(简笔画-绘制漂亮的西瓜)

简介: 简述Summer is coming…我们呢,为大家准备了丰盛的佳果-西瓜,清爽解渴,甘味多汁。一笔一划学简笔画,分分钟让你掌握一门新技能,下面我们来绘制一个“盛夏之王”-西瓜,赶快一起来试试吧。简述简笔画绘制效果源码简笔画我们先简单看看西瓜的基本组成,一步步进行拆分、组合。绘制效果具体的效果如下所示,我们可以

简述

Summer is coming…我们呢,为大家准备了丰盛的佳果-西瓜,清爽解渴,甘味多汁。

一笔一划学简笔画,分分钟让你掌握一门新技能,下面我们来绘制一个“盛夏之王”-西瓜,赶快一起来试试吧。

简笔画

我们先简单看看西瓜的基本组成,一步步进行拆分、组合。

这里写图片描述

绘制

效果

具体的效果如下所示,我们可以再进行更好的完善。

这里写图片描述

源码

主要分为以下三部:

  • 绘制外圆(绿色部分)
  • 绘制内圆(红色部分)
  • 绘制椭圆(西瓜子)

注意:绘制西瓜子的时候,由于西瓜子随机分布在西瓜中,所以我们使用了随机数来表示区域,并判断西瓜子是否在内圆中(西瓜子肯定要在西瓜内O__O”…)。

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);

    QPainterPath path;

    // 起始点(矩形左上角坐标)
    QPoint startPoint(50, 10);
    // 外部矩形宽度的1/2(外部圆半径)
    int nOuterRadius = 150;
    // 内部矩形宽度的1/2(内部圆半径)
    int nInnerRadius = 150;
    int nInnerHeightRadius = 120;
    // 间距
    int nSpacing = nOuterRadius - nInnerHeightRadius;

    QPointF rightPoint(startPoint.x() + nOuterRadius * 2, startPoint.y() + nOuterRadius);
    QRect outerRect(startPoint.x(), startPoint.y(), nOuterRadius * 2, nOuterRadius * 2);
    QPointF leftPoint(startPoint.x(), startPoint.y() + nInnerHeightRadius + nSpacing);
    QRect innerRect(startPoint.x(), startPoint.y() + nSpacing, nInnerRadius * 2, nInnerHeightRadius * 2);

    // 1.绘制外圆(绿色部分)
    path.moveTo(rightPoint);
    path.arcTo(outerRect, 180, 180);
    path.closeSubpath();
    painter.setPen(Qt::black);
    painter.setBrush(QColor(5, 150, 60));
    painter.drawPath(path);

    path = QPainterPath();
    // 2.绘制内圆(红色部分)
    path.moveTo(leftPoint);
    path.arcTo(innerRect, 180, 180);
    path.closeSubpath();
    painter.setPen(Qt::black);
    painter.setBrush(Qt::red);
    painter.drawPath(path);

    // 3.生成椭圆(西瓜子)
    QPainterPath seedsPath = QPainterPath();

    qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));

    // 用来判断椭圆范围
    for (int i = innerRect.left(); i < innerRect.left() + innerRect.width(); i += 30)
    {
        for(int j = innerRect.top() + nInnerHeightRadius; j < innerRect.top() + nInnerHeightRadius * 2; j += 20)
        {
            // 随机数(西瓜子随机分布在西瓜中)
            int nX = qrand() % 30;
            int nY = qrand() % 30;
            // 当椭圆在内部路径内时,添加至绘制路径(西瓜子肯定要在西瓜内O__O"…)
            QRect rect(i + nX, j + nY, 6, 10);
            if (path.contains(rect))
                seedsPath.addEllipse(rect);
        }
    }

    painter.setPen(Qt::NoPen);
    painter.setBrush(Qt::black);
    painter.drawPath(seedsPath);
}
目录
相关文章
|
7月前
|
存储
QT图形视图框架绘制曲线图和Smith图
QT图形视图框架绘制曲线图和Smith图
139 0
|
7月前
|
数据可视化 图形学 开发者
【Qt 底层机制之图形渲染引擎】深入理解 Qt 的 渲染机制:从基础渲染到高级图形
【Qt 底层机制之图形渲染引擎】深入理解 Qt 的 渲染机制:从基础渲染到高级图形
1068 4
|
4月前
|
XML Linux C++
【Qt】图形化和纯代码实现Hello world的比较
【Qt】图形化和纯代码实现Hello world的比较
《QT从基础到进阶·二十六》绘制多个图形项(QGraphicsRectItem,QGraphicsLineItem,QGraphicsPolygonItem)
《QT从基础到进阶·二十六》绘制多个图形项(QGraphicsRectItem,QGraphicsLineItem,QGraphicsPolygonItem)
248 0
|
7月前
|
编解码 供应链 开发工具
英飞凌采用Qt图形解决方案增强Traveo T2G MCU系列,实现智能渲染技术
在竞争激烈的全球半导体市场,制造商一直在努力缩短产品上市时间。同时,他们对流畅、高分辨率图形显示器的需求也在日益增长。
|
7月前
|
数据可视化 计算机视觉
QT基础教程(图形处理)
QT基础教程(图形处理)
90 0
|
7月前
|
存储 数据可视化 测试技术
[Qt5] QGraphics图形视图框架概述(Item、Scene和View)
[Qt5] QGraphics图形视图框架概述(Item、Scene和View)
1307 0
|
缓存
《QT从基础到进阶·二十二》QGraphicsView显示大量图形项item导致界面卡顿的解决办法
《QT从基础到进阶·二十二》QGraphicsView显示大量图形项item导致界面卡顿的解决办法
699 0
QT图形视图系统 - 使用一个项目来学习QT的图形视图框架 - 终篇
接上一篇,我们需要继续完成以下的效果; 先上个效果图:
128 0
|
图形学 容器
QT5图形视图框架
GraphicsView (图形视图)框架结构取代了之前版本中的QCanvas模块,它提 供基于图元的模型/视图编程,类似于QtlnterView的模型/视图结构,只是这里的数据是图形。
138 0