【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();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/136198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 学习笔记

vue3 官网&#xff1a;简介 | Vue.js (vuejs.org) 1. 环境搭建与启动 npm create vuelatest 这一指令将会安装并执行 create-vue&#xff0c;它是 Vue 官方的项目脚手架工具 之后&#xff0c;你将会看到一些诸如 TypeScript 和测试支持之类的可选功能提示&#xff1a; ✔ …

AI 绘画 | Stable Diffusion 高清修复、细节优化

前言 在 Stable Diffusion 想要生成高清分辨率的图片。在文生图的功能里&#xff0c;需要设置更大的宽度和高度。在图生图的功能里&#xff0c;需要设置更大的重绘尺寸或者重绘尺寸。但是设置完更大的图像分辨率&#xff0c;需要更大显存&#xff0c;1024*1024的至少要电脑的空…

介绍两个好用又好玩的大模型工具

先让数字人跟大家打个招呼吧。 我的AI数字人会手语了 发现没&#xff0c;我的数字人本周又学了一个新技能&#xff1a;手语。 这些数字人都是通过AI生成的。 但数字人不是今天的主题&#xff0c;今天要跟大家聊聊大模型。 自从大模型出现后&#xff0c;很多人&#xff08;包…

模态对话框和非模态对话框

创建到堆区这样非模态对话框就不会一闪而过 .exec使程序进入阻塞状态 ()[]{}lambda表达式 55号属性可以在对话框关闭的时候将堆区的内存释放掉从而防止内存泄露

Failed to connect to github.com port 443:connection timed out

解决办法&#xff1a; 步骤1&#xff1a; 在这里插入图片描述 步骤2&#xff1a; -步骤3 &#xff1a;在git终端中执行如下命令&#xff1a; git config --global http.proxy http:ip:port git config --global https.proxy http:ip:port git config --global http.proxy htt…

debian/ubuntu/windows配置wiregurad内网服务器(包含掉线自启动)

文章目录 前言一、服务器配置安装wireguard软件生成私钥公钥配置服务器参数配置服务器sysctl参数启动、停止服务端 二、用户端配置安装wireguard软件生成私钥公钥配置客户端参数启动、停止客户端配置服务开机启动 三、服务器添加、删除客户四、配置掉线自启动配置掉线自启动脚本…

centos的docker镜像下载ffmpeg的方式

ffmpeg是业界比较好用的开源的音频处理工具&#xff0c;当我们在实际业务中使用ffmpeg的时候&#xff0c;直接使用yum安装回提示找不到ffmpeg的包&#xff0c;遇到这种情况&#xff0c;可以通过以下方式来进行安装&#xff08;docker环境&#xff09;。 已经拥有镜像 更新源 …

计算机丢失mfc100.dll如何恢复,详细解析mfc100.dll文件丢失解决方法

在计算机使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;比如“mfc100.dll丢失”。这是因为动态链接库&#xff08;DLL&#xff09;文件是Windows操作系统的重要组成部分&#xff0c;它们包含了许多程序运行所需的函数和数据。当这些DLL文件丢失或损坏时&#x…

在已有的虚拟环境中升级python版本

对于现有的虚拟环境&#xff0c;想升级python版本方法&#xff0c;试了无数的方法终于找对了。 1.首先activate对应的虚拟环境&#xff0c;然后输入下面的命令&#xff1a; conda install python3.8 建议加上镜像源 ​conda install python3.8 -i https://pypi.tuna.tsingh…

说话人识别声纹识别CAM++,ECAPA-TDNN等算法

参考:https://www.modelscope.cn/models?page=1&tasks=speaker-verification&type=audio https://github.com/alibaba-damo-academy/3D-Speaker/blob/main/requirements.txt 单个声纹比较可以直接modelscope包运行 from modelscope.pipelines import pipeline sv_pi…

pytest中的pytest.ini

[pytest] filterwarnings ignore::DeprecationWarning addopts -v -s markers uat:1 smok:2 log_cli1 xfail_strict True filterwarnings ignore::DeprecationWarning 这个的功能就是 test_login.py::Test_login::test_login_correct_password PASSEDwarnings summary …

推荐大学生考研党都来使用的白板笔记软件!上岸卷王必备!

考研这条路&#xff0c;对于很多大学生来说&#xff0c;是一条漫漫长路。相信很多人都有这样的体会&#xff1a;看了大量的书籍&#xff0c;记了大量的笔记&#xff0c;但是到了临近考试的时候&#xff0c;却发现复习的内容和思路都不是很清晰&#xff0c;效率不高。 针对这个…

算法通过村第十八关-回溯|白银笔记|经典问题

文章目录 前言组合总和问题分割回文串子集问题排序问题字母大小写全排列单词搜索总结 前言 提示&#xff1a;我不愿再给你写信了。因为我终于感到&#xff0c;我们的全部通信知识一个大大的幻影&#xff0c;我们每个人知识再给自己写信。 --安德烈纪德 回溯主要解决一些暴力枚举…

13 # 手写 concat 方法

concat 的使用 concat() 方法用于合并两个或多个数组。此方法不会更改现有数组&#xff0c;而是返回一个新数组。如果省略了所有参数&#xff0c;则 concat 会返回调用此方法的现存数组的一个浅拷贝。 <script>var arr1 ["k", "a", "i"…

2023年眼镜行业分析(京东眼镜销量数据分析):市场规模同比增长26%,消费需求持续释放

随着我国经济的不断发展&#xff0c;电子产品不断普及&#xff0c;低龄及老龄人口的用眼场景不断增多&#xff0c;不同年龄阶段的人群有不同的视力问题&#xff0c;因此&#xff0c;视力问题人口基数也随之不断加大&#xff0c;由此佩戴眼镜的人群也不断增多。 同时&#xff0c…

【凡人修仙传】预计开播倒计时,线下举办超前观影活动,隆重期待

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料凡人最新资讯&#xff0c;《凡人修仙传》这部备受期待的动漫作品&#xff0c;终于在新年之际宣布了定档日期。据悉&#xff0c;该动漫将于11月25日&#xff0c;也就是周六上午11点&#xff0c;与广大…

Linux搭建我的世界MC服务器 【Minecraft外网联机教程】

文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 前言 Li…

通过创建自定义标签来扩展HTML

使用HTML时&#xff0c;例如&#xff0c;使用<b>标记显示粗体文本。 如果需要列表&#xff0c;则对每个列表项使用<ul>标记及其子标记<li> 。 标签由浏览器解释&#xff0c;并与CSS一起确定网页内容的显示方式以及部分内容的行为。 有时&#xff0c;仅使用一…

什么是前台、中台、和后台?

前台&#xff1a;即包括与用户直接交互的界面&#xff0c;如&#xff1a;web页、app&#xff1b;也包括服务端各种实时响应用户请求的业务逻辑&#xff0c;如&#xff1a;商品查询、订单系统等。 后台&#xff1a;面向内部运营人员的管理系统、配置系统&#xff0c;如&#xf…

Leetcode---370周赛

题目列表 2923. 找到冠军 I 2924. 找到冠军 II 2925. 在树上执行操作以后得到的最大分数 2926. 平衡子序列的最大和 一、找到冠军I 第一题模拟题&#xff0c;简单来说是看每一行(列)是否全是1&#xff0c;当然不包括自己比自己强的情况&#xff0c;需要特判 代码如下 …