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

简述

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);
}
时间: 2024-08-24 22:50:39

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

Qt之图形(简笔画-绘制卡通蚂蚁)

简述 关于简笔画的介绍很多,有动物.水果.蔬菜.交通工具等,通常会对绘制一步步进行拆分.组合.然后绘制为我们想要的结果. 下面来介绍另外的一个种类:昆虫类-卡通蚂蚁. 简述 绘制 效果 源码 绘制 效果 具体的效果如下所示,我们可以再进行更好的完善. 源码 主要分为以下三部: 绘制屁股 绘制肚子 绘制头部 注意:绘制的时候,由于各个部分的颜色不同,而且坐标不好定位,所以我们采用的图形覆盖的方式. void MainWindow::paintEvent(QPaintEvent *) { QPain

QT 基本图形绘制

QT 基本图形绘制 1.告诉绘制引擎一些东西 QPainter::Antialiasing 在可能的情况下,反锯齿       QPainter::TextAntialiasing 在可能的情况下,文字反锯齿       QPainter::SmoothPixmapTransform   采用平滑的Pixmap变换算法 2.绘制函数 3.风格 1)画刷风格 2)画笔风格 3)画笔连接点风格 4)顶端风格 4.绘图前的准备 1  如果要在绘图设备(一般为窗口部件)上绘图,只需创建一个QPainte

Qt之图形(绘制文本)

简述 前面我们讲解了Qt图形的基本绘制,其中包括: 绘制文本.直线.直线.矩形.弧线.椭圆.多边形.图片,以及其它一些高级用法,比如:渐变.转换等. 本节我们来详细讲解文字的绘制.主要通过QPainter的darwText()函数来实现,里面包含多个重载函数,其中,可以通过QRect来指定绘制的区域,也可以通过QPoint来指定绘制的起始点. QFont类可以辅助设置文本的大小.粗细.字符间距等,然后使用setFont()来设置. QFontInfo类用来获取字体的信息,可以通过fontInfo

Qt 2D绘图之三:绘制文字、路径、图像、复合模式

一.绘制文字 除了绘制图形以外,还可以使用QPainter::darwText()函数来绘制文字,也可以使用QPainter::setFont()设置文字所使用的字体,使用QPainter::fontInfo()函数可以获取字体的信息,它返回QFontInfo类对象.在绘制文字时会默认使用抗锯齿. 1.1 基本绘制 下面仍然在上一节的程序中进行代码演示,更改paintEvent()的内容如下: void Widget::paintEvent(QPaintEvent *) { QPainter p

全面总结:MATLAB如何画出漂亮的图

在绘图命令中应该如何确定横坐标和纵坐标的标度尺寸(自己定范围) 如何在一个坐标中绘制多条曲线,并用不同的颜色区别. 希望得到答案,谢谢!!!!!!!!!!! help plot help axis axis ('xlabel','ylabel') a1=plot(); hlod on a2=plot(); legend([a1 a2],'图1名',‘图2名') hold off 还可以更多 x1=-pi:pi/12:pi; x2=-pi:pi/12:pi; y1=sin(x1); y2=cos(

Qt之图形(QPainter的基本绘图)

简述 Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类. QPainter用来执行绘图操作,其提供的API在GUI或QImage.QOpenGLPaintDevice.QWidget和QPaintDevice显示图形(线.形状.渐变等).文本和图像. QPaintDevice不直接绘制物理显示画面,而利用逻辑界面的中间媒介.例如,绘制矩形图形时,为了将对象绘制到QWidget.Q

如何在论文中画出漂亮的插图?

知乎用户的回答(1259票)]: 强烈推荐 Python 的绘图模块 matplotlib: python plotting .画出来的图真的是高端大气上档次,低调奢华有内涵~ 适用于从 2D 到 3D,从标量到矢量的各种绘图.能够保存成从 eps, pdf 到 svg, png, jpg 的多种格式.并且 Matplotlib 的绘图函数基本上都与 Matlab 的绘图函数名字都差不多,迁移的学习成本比较低.开源免费.如图所示(题目描述中的图在最后): (以下图片均引用自 Thumbnail

QT自定义opengl的Widget绘制Mat

QT自定义opengl的Widget绘制Mat 宽高 512 修改名字mat 自定义类型 提升为   提升为MatView类   类型已经改变为MatView   新建MatView类cpp文件   添加头文件 修改构造函数(函数实现,调用父类构造函数) 添加宏定义   重载绘制函数 只显示图片使用paintEvent() 若绘制视频相关,需要使用repaint.update相关函数   只要窗口发生变化,都会调用该函数(如:窗口移动了,所以相关业务逻辑,不能放入,只做绘图的业务)   工程文件

计算机视觉之--使用opencv生成简笔画小视频

本教程介绍了如何使用opencv生成一副简笔画视频,包括片头.如何做画等. 1.视频包括: (1)片头:包括学号姓名,同时会出现"I Love CV"在学号和姓名的中央,而且他们是以动画方式"飞入"视频的,其中姓名从顶部"飞"到屏幕1/3处,学号信息从下"飞"到1/3处,I LOVE CV从左向右飞入.在片头显示完后,会停顿越三秒钟后,片头消失,正片开始. 下图为片头停顿处截图: (2)正片:正片主要画了一头可爱的小熊和一头胖