当前位置: 首页 > 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();
}
http://www.lryc.cn/news/226411.html

相关文章:

  • 开发中常用的SQL语句
  • Unreal UnLua + Lua Protobuf
  • java 类和对象 (图文搭配,万字详解!!)
  • pytorch DistributedDataParallel 分布式训练踩坑记录
  • Stable Diffusion webui 源码调试(三)
  • 工作学习记录
  • 邻接矩阵储存图实现深度优先遍历(C++)
  • hdlbits系列verilog解答(100位加法器)-42
  • 学者观察 | 数字经济中长期发展中的区块链影响力——清华大学柴跃廷
  • python-flask笔记
  • tensor和ndarray的相互转换,同时需要注意cuda和cpu的迁移
  • 《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》阅读笔记
  • Flink 基础 -- 应用开发(Table API SQL) 概念和通用API
  • Flink之Java Table API的使用
  • 【Unity细节】Unity中如何让组件失活而不是物体失活
  • [设计模式] 建造者模式
  • 在DDD领域驱动下的微服务数据库的MVC设计思路(高度可行性)
  • Leetcode2834. 找出美丽数组的最小和
  • acwing算法基础之搜索与图论--kruskal算法
  • 微信H5跳转微信小程序
  • Yii2 引入 外部无命名空间的类,Class not found
  • 设计模式是测试模式咩?
  • Aspose.OCR for .NET 2023Crack
  • conda环境中pytorch1.2.0版本安装包安装一直失败解决办法!!!
  • 后端面试问题(学习版)
  • 数据管理系统-week1-介绍
  • 【SpringBoot】手写模拟SpringBoot核心流程
  • 应对.locked勒索病毒:恢复、预防全方位攻略
  • 基于DS1302时钟液晶12864显示2路闹钟仿真及源程序
  • AGC034E Complete Compress