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);
}
Qt之图形(简笔画-绘制漂亮的西瓜)的更多相关文章
- Qt之图形(简笔画-绘制卡通蚂蚁)
简述 关于简笔画的介绍很多,有动物.水果.蔬菜.交通工具等,通常会对绘制一步步进行拆分.组合.然后绘制为我们想要的结果. 下面来介绍另外的一个种类:昆虫类-卡通蚂蚁. 简述 绘制 效果 源码 绘制 效 ...
- QT 基本图形绘制
QT 基本图形绘制 1.告诉绘制引擎一些东西 QPainter::Antialiasing 在可能的情况下,反锯齿 QPainter::TextAntialiasing 在可能的情况下,文 ...
- IOS 绘制基本图形( 画圆、画线、画圆弧、绘制三角形、绘制四边形)
// 当自定义view第一次显示出来的时候就会调用drawRect方法- (void)drawRect:(CGRect)rect { // 1.获取上下文 CGContextRef ctx = UIG ...
- Qt之图形(绘制文本)
简述 前面我们讲解了Qt图形的基本绘制,其中包括: 绘制文本.直线.直线.矩形.弧线.椭圆.多边形.图片,以及其它一些高级用法,比如:渐变.转换等. 本节我们来详细讲解文字的绘制.主要通过QPaint ...
- Qt 2D绘图之三:绘制文字、路径、图像、复合模式
一.绘制文字 除了绘制图形以外,还可以使用QPainter::darwText()函数来绘制文字,也可以使用QPainter::setFont()设置文字所使用的字体,使用QPainter::font ...
- Qt编写自定义控件8-动画按钮组控件
前言 动画按钮组控件可以用来当做各种漂亮的导航条用,既可以设置成顶部底部+左侧右侧,还自带精美的滑动效果,还可以设置悬停滑动等各种颜色,原创作者雨田哥(QQ:3246214072),驰骋Qt控件界多年 ...
- Qt之图形(QPainter的基本绘图)
简述 Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类. QPainter用来执行 ...
- 用Python画如此漂亮的专业插图 ?简直So easy!
本文整理自知乎问答,仅用于学术分享,著作权归作者所有.如有侵权,请联系我删文处理.多多转发,多多学习! 方法一 强烈推荐 Python 的绘图模块 matplotlib: python plottin ...
- Qt自定义控件之仪表盘2--QPaint绘制仪表盘
0.前言 前面一篇文章写道了仪表盘的特点,实现了一个贴图的仪表盘,属于低配版本的仪表盘. 主要是有任何改动时候就需要重新设计图片,不能适配不同控件大小,即使让它自由拉伸,但仪表盘放大缩小时候显示 ...
随机推荐
- Shell(二)运算符
基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 ...
- laydate 监听日期切换
```` //日期范围 laydate.render({ elem: '#Time', range: "至", max: gitData() ,done: function(val ...
- python_形参、实参
#参数:形参.实参'''def display_message(title): print("My favourite book is %s" %title) #return 0 ...
- Nginx 实现反向代理
Nginx 实现反向代理 两个域名指向同一台 Nginx 服务器,用户访问不同的域名显示不同的网页内容 两个域名分别是 www.test1.com www.test2.com 1.准备工作 下载及安装 ...
- WinServer-IIS-IP及域的限制
如果启用域名限制,那么会对服务器产生比较大的资源开销,慎重选择这个 来自为知笔记(Wiz)
- web服务启动spring自己主动运行ApplicationListener的使用方法
我们知道.一般来说一个项目启动时须要载入或者运行一些特殊的任务来初始化系统.通常的做法就是用servlet去初始化.可是servlet在使用spring bean时不能直接注入,还须要在web.xml ...
- 闭包(closure)与协程共用时要注意的事情
闭包是一种能够让你用非常舒服的方式来编程的小技巧,Go也支持闭包. 假设从来没有接触过闭包,想在一開始就弄懂什么是闭包(closure)是非常困难的,就像递归一样,直到你真正写过.用过它,你才干真正的 ...
- apiCloud中Frame框的操作,显示与隐藏Frame
Frame是一层一层的概念, 有的位于上层,有的位于下层. 1.加载菜单 2.加载页面层 3.首页拆分出内容层,这个时候内容层位于页面层的上方,当点击其他页面的时候,内容层遮挡住了他们 解决方案一 判 ...
- http://www.secrepo.com 安全相关的数据获取源
来自:http://www.secrepo.com Network MACCDC2012 - Generated with Bro from the 2012 dataset A nice datas ...
- 判断一个整数是否是回文数C++实现 leetcode系列(九)
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...