Qt之图形(简笔画-绘制漂亮的西瓜)
2016-05-13 19:09
591 查看
简述
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学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- Qt 5.6更新至RC版,最终版本近在咫尺
- Qt定时器和随机数详解
- Qt实现图片移动实例(图文教程)
- Qt for Android开发实例教程
- QModelIndex/Role/Model介紹<二>
- Qt Model/View/Delegate浅谈 - QAbstractListModel
- Qt Model/View/Delegate浅谈 - roleNames()
- 基于PyQt5的快速开发框架QFramer
- OSX下安装PyQt
- ok6410开发板移植DirectFB手记
- 【笔记】给Qt内嵌一个Chrome吧
- 【算法】最短路径之A*搜索
- qt入门必备
- 在 Qt4 中使用 C++11
- Hello Word ~ v0.2.2 背单词软件发布 -- By WHYPRO
- ubuntu下opencv和qt的安装配置
- linux下opengl的安装(with qt)
- qt 学习小节