Qt之图形(简笔画-绘制卡通蚂蚁)
简述
关于简笔画的介绍很多,有动物、水果、蔬菜、交通工具等,通常会对绘制一步步进行拆分、组合。然后绘制为我们想要的结果。
下面来介绍另外的一个种类:昆虫类-卡通蚂蚁。
绘制
效果
具体的效果如下所示,我们可以再进行更好的完善。
源码
主要分为以下三部:
- 绘制屁股
- 绘制肚子
- 绘制头部
注意:绘制的时候,由于各个部分的颜色不同,而且坐标不好定位,所以我们采用的图形覆盖的方式。
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter :: Antialiasing, true);
/*****屁股*****/
QPainterPath path;
path.addRoundRect(QRect(200, 60, 150, 150), 1000);
painter.setBrush(Qt::white);
painter.setPen(Qt::black);
painter.drawPath(path);
/*****肚子*****/
// 腿
path = QPainterPath();
path.moveTo(170, 180);
path.lineTo(120, 260);
path.moveTo(185, 180);
path.lineTo(145, 280);
path.moveTo(200, 180);
path.lineTo(180, 290);
path.moveTo(200, 180);
path.lineTo(220, 290);
path.moveTo(215, 180);
path.lineTo(250, 280);
path.moveTo(230, 180);
path.lineTo(280, 260);
painter.setBrush(Qt::NoBrush);
painter.setPen(Qt::white);
painter.drawPath(path);
// 肚子
path = QPainterPath();
path.addRoundRect(QRect(150, 130, 100, 100), 1000);
painter.setBrush(Qt::white);
painter.setPen(Qt::black);
painter.drawPath(path);
/*****头*****/
// 犄角
path = QPainterPath();
path.moveTo(80, 100);
path.lineTo(60, 20);
path.moveTo(140, 100);
path.lineTo(160, 20);
painter.setBrush(Qt::NoBrush);
painter.setPen(Qt::white);
painter.drawPath(path);
path = QPainterPath();
path.addRoundRect(QRect(50, 80, 120, 120), 1000);
painter.setBrush(Qt::white);
painter.setPen(Qt::black);
painter.drawPath(path);
// 左眼
path = QPainterPath();
path.addRoundRect(QRect(70, 120, 25, 25), 1000);
painter.setBrush(Qt::black);
painter.setPen(Qt::NoPen);
painter.drawPath(path);
path = QPainterPath();
path.addRoundRect(QRect(75, 126, 10, 10), 1000);
painter.setBrush(Qt::white);
painter.setPen(Qt::NoPen);
painter.drawPath(path);
// 右眼
path = QPainterPath();
path.addRoundRect(QRect(120, 110, 25, 25), 1000);
painter.setBrush(Qt::black);
painter.setPen(Qt::NoPen);
painter.drawPath(path);
path = QPainterPath();
path.addRoundRect(QRect(125, 118, 10, 10), 1000);
painter.setBrush(Qt::white);
painter.setPen(Qt::NoPen);
painter.drawPath(path);
// 嘴
path = QPainterPath();
path.moveTo(160, 108);
path.arcTo(QRect(130, 48, 60, 60), 270, 100);
painter.rotate(30);
painter.setBrush(Qt::NoBrush);
painter.setPen(Qt::black);
painter.drawPath(path);
}
对于一般图形的绘制比较简单,因为常用、有规律,而且比较规则,像圆、椭圆、矩形、直线这些。如果存在各种复杂的图形那么用原生的绘制方案就很难实现了,需要消耗大量的时间来回折腾,所以这里就不再介绍了。
Qt之图形(简笔画-绘制卡通蚂蚁)的更多相关文章
- Qt之图形(简笔画-绘制漂亮的西瓜)
简述 Summer is coming-我们呢,为大家准备了丰盛的佳果-西瓜,清爽解渴,甘味多汁. 一笔一划学简笔画,分分钟让你掌握一门新技能,下面我们来绘制一个"盛夏之王"-西瓜 ...
- QT 基本图形绘制
QT 基本图形绘制 1.告诉绘制引擎一些东西 QPainter::Antialiasing 在可能的情况下,反锯齿 QPainter::TextAntialiasing 在可能的情况下,文 ...
- IOS 绘制基本图形( 画圆、画线、画圆弧、绘制三角形、绘制四边形)
// 当自定义view第一次显示出来的时候就会调用drawRect方法- (void)drawRect:(CGRect)rect { // 1.获取上下文 CGContextRef ctx = UIG ...
- Qt之图形(绘制文本)
简述 前面我们讲解了Qt图形的基本绘制,其中包括: 绘制文本.直线.直线.矩形.弧线.椭圆.多边形.图片,以及其它一些高级用法,比如:渐变.转换等. 本节我们来详细讲解文字的绘制.主要通过QPaint ...
- Qt之图形(QPainter的基本绘图)
简述 Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类. QPainter用来执行 ...
- Qt编写自定义控件8-动画按钮组控件
前言 动画按钮组控件可以用来当做各种漂亮的导航条用,既可以设置成顶部底部+左侧右侧,还自带精美的滑动效果,还可以设置悬停滑动等各种颜色,原创作者雨田哥(QQ:3246214072),驰骋Qt控件界多年 ...
- Qt自定义控件之仪表盘2--QPaint绘制仪表盘
0.前言 前面一篇文章写道了仪表盘的特点,实现了一个贴图的仪表盘,属于低配版本的仪表盘. 主要是有任何改动时候就需要重新设计图片,不能适配不同控件大小,即使让它自由拉伸,但仪表盘放大缩小时候显示 ...
- 借助Photoshop,Illustrator等设计软件进行WPF图形图像的绘制
原文:借助Photoshop,Illustrator等设计软件进行WPF图形图像的绘制 本文所示例子是借助第三方设计软件,制作复杂的矢量图形,转成与XAML酷似的SVG,再转换成xaml而实现的. 这 ...
- GDI+绘制图形和画刷填充图形
GDI+可以再Windows窗体应用程序中以编程方式绘制图形等. 可以在VS里新建项目-Windows窗体应用程序-建一个窗体.首先引入命名空间using System.Drawing.Imaging ...
随机推荐
- Python学习笔记(一):基本数据类型
在Python3种,有六种标准数据类型: 数字(Number) 字符串(String) 列表(List) 元组(Tuple) 集合(Set) 字典(Dictionary) 这六种数据类型中,数字类型和 ...
- 【codeforces 747E】Comments
[题目链接]:http://codeforces.com/problemset/problem/747/E [题意] 给你一个类似递归的结构; 让你把每一层的字符串按照层,一层层地输出出来; 并输出层 ...
- java ee服务器/应用服务器的理解
42.由Apache.Sun 和其他一些公司及个人共同开发而成.由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现.43.可以这样认为,当在一台机器上配 ...
- UltraEdit正則表達式介绍及实例
前几天,有个将Excel中的数据导入到数据库中的需求.原本想到用程序读取Excel中的数据并存储到数据库中,但经一哥们的提醒,说用 EditPlus或UltraEdit这种工具直接将数据拼凑成SQL插 ...
- 百度分页效果之纯jsp版
数据库连接工具类 package com.gao.page.utils; import java.sql.Connection; import java.sql.DriverManager; publ ...
- Genymotion出现Installation error: INSTALL_FAILED_CPU_ABI_INCOMPATIBLE错误解决方法
今天在Genymotion上执行曾经的一个项目(libs中有多个SDK和so文件)时,出现下面错误: Console控制台中:Installation error: INSTALL_FAILED_CP ...
- Linux防火墙限制指定port仅仅能由指定IP訪问
须要对redis的端口做限制,仅仅能让公司内指定IP的机器訪问 -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A ...
- 除了信号触发线程与接收者线程相同的情况能直接调用到slot,其它情况都依赖事件机制(解决上面代码收不到信号的问题其实很简单,在线程的run();函数中添加一个事件循环就可以了,即加入一句exec();),信号槽不就是一个回调函数嘛
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { pThreadCon = new CSerialThread ...
- luogu 2679 子串
子串 史上最简短的一篇博客,毕竟看题解ac心疼我的kmp /* f[i][j][k][0/1]表示A的前i个,B的前j个,用到了k个子串,当前字符选或者不选. 所以f[0][0][0][0]的方案数为 ...
- yaml文件结构
VERSION: 1.0.0.1 --指定控制文件schema的版本DATABASE: db_name --指定连接数据库的名字,如果没有指定,由环境变量$P ...