当前位置: 首页 > news >正文

【Qt绘制小猪】以建造者模式绘制小猪

效果

学以致用,使用设计模式之建造者模式绘制小猪。

在这里插入图片描述

代码

接口:申明绘制的步骤
PigBuilder.h

#ifndef PIGBUILDER_H
#define PIGBUILDER_H#include <QObject>
#include <QPainter>class PigBuilder : public QObject
{Q_OBJECT
public:explicit PigBuilder(QObject *parent = nullptr) : QObject(parent){}virtual ~PigBuilder(){}// 绘制身体virtual void drawBody(QPainter &painter) = 0;// 绘制胳膊virtual void drawEars(QPainter &painter) = 0;// 绘制眼睛virtual void drawEyes(QPainter &painter) = 0;// 绘制鼻子virtual void drawNose(QPainter &painter) = 0;// 绘制腿virtual void drawLegs(QPainter &painter) = 0;// 绘制尾巴virtual void drawTail(QPainter &painter) = 0;
};#endif // PIGBUILDER_H

实例化:实例出具体绘制的小猪
SimplePig

#include "pigbuilder.h"class SimplePig : public PigBuilder
{Q_OBJECT
public:explicit SimplePig(QObject *parent = nullptr) : PigBuilder(parent){}virtual ~SimplePig(){}virtual void drawBody(QPainter &painter){painter.setBrush(QBrush(QColor(247, 204, 148)));painter.setPen(Qt::NoPen);painter.drawEllipse(QPointF(250, 250), 100, 120);}virtual void drawEars(QPainter &painter){painter.setBrush(QBrush(QColor(247, 204, 148)));painter.setPen(Qt::NoPen);painter.drawEllipse(QPointF(200, 180), 40, 50);painter.drawEllipse(QPointF(300, 180), 40, 50);}virtual void drawEyes(QPainter &painter){painter.setBrush(QBrush(QColor(255, 255, 255)));painter.setPen(Qt::NoPen);painter.drawEllipse(QPointF(225, 235), 15, 25);painter.drawEllipse(QPointF(275, 235), 15, 25);painter.setBrush(QBrush(QColor(0, 0, 0)));painter.drawEllipse(QPointF(225, 235), 8, 15);painter.drawEllipse(QPointF(275, 235), 8, 15);}virtual void drawNose(QPainter &painter){painter.setBrush(QBrush(QColor(255, 185, 185)));painter.setPen(Qt::NoPen);painter.drawEllipse(QPointF(250, 270), 15, 20);}virtual void drawLegs(QPainter &painter){painter.setBrush(QBrush(QColor(247, 204, 148)));painter.setPen(Qt::NoPen);painter.drawEllipse(QPointF(200, 320), 20, 40);painter.drawEllipse(QPointF(300, 320), 20, 40);}virtual void drawTail(QPainter &painter){painter.setBrush(QBrush(QColor(247, 204, 148)));painter.setPen(Qt::NoPen);painter.drawEllipse(QPointF(320, 250), 20, 40);}
};

建造者:用于创建小猪
PigDirector

class PigDirector : public QObject
{Q_OBJECT
public:explicit PigDirector(QObject *parent = nullptr) : QObject(parent){m_pigBuilder = nullptr;}virtual ~PigDirector(){}void setBuilder(PigBuilder *pigBuilder){m_pigBuilder = pigBuilder;}void draw(QPainter &painter){if (m_pigBuilder != nullptr){m_pigBuilder->drawBody(painter);m_pigBuilder->drawEars(painter);m_pigBuilder->drawEyes(painter);m_pigBuilder->drawNose(painter);m_pigBuilder->drawLegs(painter);m_pigBuilder->drawTail(painter);}}private:PigBuilder *m_pigBuilder;
};

窗体:用于显示
MainWidget

class MainWidget : public QWidget
{Q_OBJECTpublic:MainWidget(QWidget *parent = nullptr): QWidget(parent){setFixedSize(500, 500);// 创建简单的小猪PigBuilder *pigBuilder = new SimplePig();// 设置小猪的构建方式m_pigDirector.setBuilder(pigBuilder);}~MainWidget(){}protected:void paintEvent(QPaintEvent *event) override{Q_UNUSED(event);QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 构建并绘制小猪m_pigDirector.draw(painter);}private:PigDirector m_pigDirector;
};

调用:

#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWidget w;w.show();return a.exec();
}

相关文章:

【Qt绘制小猪】以建造者模式绘制小猪

效果 学以致用&#xff0c;使用设计模式之建造者模式绘制小猪。 代码 接口&#xff1a;申明绘制的步骤 PigBuilder.h #ifndef PIGBUILDER_H #define PIGBUILDER_H#include <QObject> #include <QPainter>class PigBuilder : public QObject {Q_OBJECT public:ex…...

开发中常用的SQL语句

开发中常用的SQL语句 1.update更新时不能引用本身表2.备份MySQL3.函数的使用1. case,when的使用2. IF3.其它4.拼接5. 处理时间 4.导出表结构注释等 1.update更新时不能引用本身表 UPDATE student SET valid_flag 0 WHERE id IN (SELECT idFROM (SELECT su.idFROM student su …...

Unreal UnLua + Lua Protobuf

Unreal UnLua Lua Protobuf https://protobuf.dev/ protobuf wire format&#xff1a;pb 编译到底层的数据协议 https://github.com/starwing/lua-protobuf/blob/master/README.zh.md buffer 处理 lua string 可以当 buffer 用&#xff0c;# len 不会遇到 0 截断&#xf…...

java 类和对象 (图文搭配,万字详解!!)

关于java类和对象&#xff0c;我们要掌握几个重点&#xff01; 1.类的定义方式以及对象的实例化 2.类中的成员变量和成员方法的使用 3.对象的整个初始化过程 4.封装特性 5.代码块 目录 一、面向对象的初步认识 1.1 什么是面向对象 1.2 面向对象与面向过程 1.2.1传统洗…...

pytorch DistributedDataParallel 分布式训练踩坑记录

目录 一、几个比较常见的概念&#xff1a;二、踩坑记录2.1 dist.init_process_group初始化2.2 spawn启动&#xff08;rank怎么来的&#xff09;2.3 loss backward2.4 model cuda设置2.5 数据加载 一、几个比较常见的概念&#xff1a; rank: 多机多卡时代表某一台机器&#xff…...

Stable Diffusion webui 源码调试(三)

Stable Diffusion webui 源码调试&#xff08;三&#xff09; 个人模型主页&#xff1a;LibLibai stable-diffusion-webui 版本&#xff1a;v1.4.1 内容更新随机&#xff0c;看心情调试代码~ shared 变量 shared变量&#xff0c;简直是一锅大杂烩&#xff0c;shared变量存放…...

工作学习记录

1、Spring的Lifecycle和SmartLifecycle Spring的Lifecycle和SmartLifecycle&#xff0c;可以没用过&#xff0c;但不能不知道&#xff01;-CSDN博客 2、Shiro安全框架提供了认证、授权、企业会话管理、加密、缓存管理相关的功能&#xff0c;使用Shiro可以非常方便的完成项目的…...

邻接矩阵储存图实现深度优先遍历(C++)

目录 基本要求&#xff1a; 图的结构体&#xff1a; 图的构造&#xff1a; 图的深度优先&#xff08;DFS&#xff09;&#xff1a; 图的打印输出&#xff1a; 完整代码&#xff1a; 测试数据&#xff1a; 运行结果&#xff1a; 通过给出的图的顶点和边的信息&#xff0c…...

hdlbits系列verilog解答(100位加法器)-42

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 通过实例化 100 个完整加法器来创建一个 100 位二进制纹波进位加法器。加法器将两个 100 位数字和一个进位相加,以产生一个 100 位的总和并执行。为了鼓励您实际实例化全加法器,还要在纹波进位加法器中输出每…...

学者观察 | 数字经济中长期发展中的区块链影响力——清华大学柴跃廷

导语 区块链是一种全新的分布式基础架构与计算范式&#xff0c;既能利用非对称加密和冗余分布存储实现信息不可篡改&#xff0c;又可以利用链式数据结构实现数据信息可溯源。当前&#xff0c;区块链技术已成为全球数据交易、金融结算、国际贸易、政务民生等领域的信息基础设施…...

python-flask笔记

服务器图形工具&#xff1a;FinalShellpython虚拟环境用anaconda 标题技术架构和依赖 python3.8 环境 Flask 后端框架 flask-marshmallow webargs 处理参数接收 postgresql 数据库 psycopg2-binary postgresql操作库 Flask-SQLAlchemy orm操作库 flask-admin 超管管理后台 …...

tensor和ndarray的相互转换,同时需要注意cuda和cpu的迁移

从tensor到ndarray&#xff1a;.detach() 方法用于创建一个新的张量&#xff0c;新张量与原始张量共享数据内存&#xff0c;但是不会被计算图追踪。这意味着在新张量上的操作不会影响到原始张量&#xff0c;同时也可以避免梯度传播&#xff0c;适合于提取中间结果。 # 当tenso…...

《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》阅读笔记

论文标题 《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》 Swin 这个词貌似来自后面的 Shifted WindowsShifted Windows&#xff1a;移动窗口Hierarchical&#xff1a;分层 作者 微软亚洲研究院出品 初读 摘要 提出 Swin Transformer 可以…...

Flink 基础 -- 应用开发(Table API SQL) 概念和通用API

1、概述 Apache Flink提供了两个关系API——Table API和SQL——用于统一的流和批处理。Table API是一个用于Java、Scala和Python的语言集成查询API&#xff0c;它允许以非常直观的方式组合来自关系操作符(如选择、过滤和连接)的查询。Flink的SQL支持基于Apache Calcite&#x…...

Flink之Java Table API的使用

Java Table API的使用 使用Java Table API开发添加依赖创建表环境创建表查询表输出表使用示例 表和流的转换流DataStream转换成表Table表Table转换成流DataStream示例数据类型 自定义函数UDF标量函数表函数聚合函数表聚合函数 API方法汇总基本方法列操作聚合操作Joins合并操作排…...

【Unity细节】Unity中如何让组件失活而不是物体失活

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…...

[设计模式] 建造者模式

一、引言 起因是学习okhttp过程中遇到的这段代码 Request request original.newBuilder().url(original.url()).header("Authorization", "Bearer " BearerTokenUtils.getToken(configuration.getApiKey(), configuration.getApiSecret())).header(&quo…...

在DDD领域驱动下的微服务数据库的MVC设计思路(高度可行性)

在DDD领域驱动下的微服务架构中使用MVC设计思路来设计数据库是可行的&#xff0c;因为MVC是一种经典的软件架构模式&#xff0c;可以将应用程序分为三个主要部分&#xff1a;模型、视图和控制器。在微服务架构中&#xff0c;每个微服务可以看作是一个模块&#xff0c;可以使用M…...

Leetcode2834. 找出美丽数组的最小和

Every day a Leetcode 题目来源&#xff1a;2834. 找出美丽数组的最小和 解法1&#xff1a;贪心 从最小正整数 1 开始枚举&#xff0c;设当前数为 num&#xff0c;如果 nums 里没有 target - num&#xff0c;就说明可以添加 num&#xff0c;依次填满直到有 n 个数即可。 用…...

acwing算法基础之搜索与图论--kruskal算法

目录 1 基础知识2 模板3 工程化 1 基础知识 kruskal算法的关键步骤为&#xff1a; 将所有边按照权重从小到大排序。定义集合S&#xff0c;表示生成树。枚举每条边(a,b,c)&#xff0c;起点a&#xff0c;终点b&#xff0c;边长c。如果结点a和结点b不连通&#xff08;用并查集来…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...