Qt C++ decorate模式

Nana C++ GUI库实战指南:从编译到跨平台桌面应用开发 C++ GUI开发是构建桌面应用程序的核心技术,它涉及将程序逻辑与用户界面相结合。其原理在于通过事件驱动模型和控件体系来管理窗口、布局和用户交互。对于追求高性能和原生体验的开发者而言,一个轻量级、无外部依赖的GUI库能显著提升应用的启动速度和运行效率,尤其适合开发内部工具、硬件控制面板等场景。Nana库作为纯头文件与静态库结合的现代C++解决方案,完美契合这一需求。本文聚焦于Nana库的实战应用,针对编译链接、多线程安全等高频问题提供解决方案,并深入探讨了如何使用CMake进行项目构建与静态链接,以实现高效 阅读详情

decorate.h

#pragma once


#include <QDebug>


class CPhone
{
public:
virtual void showPhoneForm() = 0;
};


class CApplePhone : public CPhone
{
public:
CApplePhone(){}
void showPhoneForm()
{
qDebug() << "this is a applephone!";
}
};


class CNokiaPhone : public CPhone
{
public:
CNokiaPhone(){}
void showPhoneForm()
{
qDebug() << "this is a nokiaphone!";
}
};


class CDecorate : public CPhone
{
public:
CDecorate(CPhone *phone) :m_phone(phone){} 
virtual void showPhoneForm(){m_phone->showPhoneForm();}


private:
CPhone *m_phone;
};


class CVelumDecorate : public CDecorate
{
public:
CVelumDecorate(CPhone *phone):CDecorate(phone){}
void showPhoneForm();
};


class CCrustDecorate : public CDecorate
{
public:
CCrustDecorate(CPhone *phone):CDecorate(phone){}
void showPhoneForm();
};


decorate.cpp

#include "decorate.h"


void CVelumDecorate::showPhoneForm()
{
CDecorate::showPhoneForm();
qDebug() << "this phone paste a velum";
}


void CCrustDecorate::showPhoneForm()
{
CDecorate::showPhoneForm();
qDebug() << "this phone add a crust";
}


main.cpp

#include <QApplication>
#include "decorate.h"


int main(int argc,char **argv)
{
QApplication app(argc,argv);

CPhone *apple = new CApplePhone;
CPhone *nokia = new CNokiaPhone;


CDecorate *velum = new CVelumDecorate(apple);
velum->showPhoneForm();
CDecorate *crust = new CCrustDecorate(nokia);
crust->showPhoneForm();
return app.exec();
}



Qt C++ template模式 这个模式就是使用多态将实现延迟到子类中进行,代码很简单 template.h #pragma once #include class CCar { public: virtual void operate() = 0; }; class CBWMCar : public CCar { public: CBWMCar(){} void operat 阅读详情

相关推荐

Qt C++ bridge模式(桥)

Bridge模式使得抽象和实现能够相对独立。 bridge.h #pragma once #include class CImplementor { public: virtual void operateImp() = 0; }; class CRectImplementor : public CImplementor { public: CR

thinkme2010的专栏 1894

PyQt(Python+Qt)学习随笔:QTreeView树形视图的rootIsDecorated属性

老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一、属性说明 QTreeView树形视图的rootIsDecorated属性用于控制是否展示对顶层项的折叠或展开的控制符,如果为True就展示,否则就不展示,当不展示也没有展开这些节点的时候,顶层的项看起来就象一个简单的列表,虽然没有展示可以折叠或展开的符合,这些节点其实还是可以正常展开或折叠。...

老猿Python 2669

Qt C++ builder模式

builder.h #pragma once #include //产品 class CCar { public: void setWheel(const QString& wheel){m_wheel = wheel;} void setbody(const QString& body){m_body = body;} void setglass(const

thinkme2010的专栏 1637

掌握七大核心技能,系统化阅读大型C++开源项目源码

C++作为高性能系统开发的核心语言,其复杂的内存管理、模板元编程和并发模型构成了现代软件工程的基石。理解这些底层原理对于掌握大型系统架构至关重要,尤其在面对像Chromium、LLVM这类由全球开发者共同维护的复杂项目时。通过系统性的方法,开发者可以跨越从“认识语法”到“理解系统”的鸿沟,将庞大的代码库庖丁解牛。本文聚焦于构建系统与依赖管理、代码组织与架构模式、内存模型与对象生命周期等七大核心技能,其中构建系统与依赖管理是项目的骨架与血脉,而内存模型与对象生命周期则是理解C++项目资源管理的核心。掌握这些技

weixin_34129696的博客 642

Qt C++ command模式(类似qt的信号槽)

这个模式利用了回调函数技术。 command.h #pragma once #include class CCommand { public: virtual void execute() = 0; }; class CReceiver { public: void action() { qDebug() } }; class

thinkme2010的专栏 1313

Qt C++ interpreter模式 (解释器模式)

这个模式常用于正则表达式等 interpreter.h #pragma once #include class CVariable; class CVarientContext { public: CVarientContext(){} virtual ~CVarientContext(){} virtual void addVarient(CVari

thinkme2010的专栏 1130

Qt C++ Observer模式(发布者-订阅者)

observer.h #pragma once #include class CObserver; class CSubjects { public: CSubjects(){} virtual ~CSubjects(){}; void attatch(CObserver *obj){m_lstObserver.append(obj);} void d

thinkme2010的专栏 2049

Qt C++ mediator模式(中介者模式)

mediator.h #pragma once #include class CMediator; class CCountry { public: virtual void setMediator(CMediator *mediator) = 0; virtual void sendMessage(const QString& message) = 0;

thinkme2010的专栏 1030

Qt C++ 工厂模式

产品类: project.h #pragma once #include class CProject { public: virtual void show() = 0; }; class CProjectA : public CProject { public: CProjectA(); void show() { qDebug()

thinkme2010的专栏 1268

Qt C++ prototype(原型模式或者克隆模式)

prototype.h #pragma once #include #include #include class CProtoTypeBase { public: virtual CProtoTypeBase* clone() = 0; virtual void printAuthor() = 0; virtual void printGroup() =

thinkme2010的专栏 969

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Qt C++ proxy模式

proxy.h #pragma once #include class CWoman { public: virtual void happyWithMan() = 0; virtual void makeEyesWithMan() = 0; }; class CWangPo : public CWoman { public: CWangPo(CW

thinkme2010的专栏 1115

PotPlayer自用皮肤

自用 PotPlayer 皮肤,仅微调了字体大小与颜色,是按个人习惯调整,未做适配性调整。

Qt C++ Iterator模式

我们常说的迭代器 iterator.h #pragma once #include template class CAggregate { public: CAggregate(){} virtual ~CAggregate(){} virtual int getSize() = 0; virtual T getData(int index) const = 0

thinkme2010的专栏 934

FOC项目知识点总结三 | 完全搞懂 Clarke 与 Park 变换(附动图,仿真文件以及详细讲解数学推导过程)

本文目的,最终可以完整推算两种变换 Clarke 变换 首先先看我们需要用到的两种坐标系 1. 自然坐标系 abcabcabc 我们知道,通过三相逆变电路,我们可以画出一个自然坐标系 abcabcabc ,即三相电压的坐标系,通入的电流在这三轴坐标系中变化: 将三个矢量相加合并在一起就如下图所展现: 使用三个坐标轴来表示十分的麻烦与不直观,因为其是非正交的,于是乎我们想要将其转化成使用两个正交的坐标轴来表示,于是乎便有了 Clarke变换。 Clarke 变换的作用: 将基于三轴二维的定子静止坐标系的各

Wilson Huang的博客 3万+

基于Halium 9为小米平板4移植Ubuntu Touch:内核适配与驱动调试实战

在移动设备生态中,Linux内核作为核心,通过硬件抽象层(HAL)管理底层硬件驱动,为上层系统提供统一接口。其模块化设计允许深度定制,是实现跨平台移植的技术基础。Halium项目正是利用这一原理,构建了一个中间层,将安卓内核的硬件支持能力“翻译”成标准Linux发行版能识别的格式,从而在手机、平板等移动设备上运行Ubuntu Touch、postmarketOS等移动Linux系统,极大地拓展了老旧设备的再利用价值。这一技术为开发者提供了在常见安卓硬件上进行Linux系统开发与定制的可能,尤其在嵌入式与物联

weixin_42639246的博客 371

Qt C++ 单体模式

singleton.h #pragma once #include class CSingleTon { public: static CSingleTon* instance(); static void releaseInstance(); QString getName() const; QString getAge() const;

thinkme2010的专栏 831

单细胞拟时序分析实战:用monocle2从Seurat对象构建细胞轨迹(附完整代码)

本文提供了一套完整的单细胞拟时序分析实战教程,详细讲解了如何将Seurat对象转换为Monocle2的CellDataSet,并构建细胞命运轨迹。内容涵盖数据转换、轨迹定义基因选择、降维参数调优、可视化技巧及结果生物学验证,旨在帮助研究者解决实际分析中的常见问题,从静态细胞图谱中挖掘动态发育过程。

weixin_29251337的博客 342

Qt C++ State模式

我们在做多个条件判断的时候常会用到switch,如果条件和内容过于繁琐,内容庞大的话,state模式就十分有用了。 state.h #pragma once #include class CState; class CContext { public: CContext(CState* state):m_state(state){} ~CContext();

thinkme2010的专栏 823

YOLOv11缝合改进Conv | SAConv在YOLOv11中的应用可切换空洞卷积与性能提升(附代码)

在本篇文章中,我们将深入探讨如何通过引入**SAConv**(Switchable Atrous Convolution,可切换空洞卷积)来优化YOLOv11网络结构,特别是在卷积操作方面的创新。我们会解析SAConv的核心原理和架构设计。

一键难忘的博客 953

基于Simulink的光伏-储能-柴油机混合微网仿真

摘要:本文基于Simulink平台构建光伏-储能-柴油机混合微网仿真模型,实现可再生能源与备用电源的协同控制。通过光伏优先、储能调节、柴油机兜底的规则控制策略,在24小时仿真中验证了系统在晴天、阴天和夜间三种典型工况下的运行性能。模型采用PVArray模块模拟光伏发电,Simscape电气库构建储能系统,自定义MATLAB函数实现柴油机启停逻辑和能量管理。仿真结果显示系统功率平衡误差<5%,储能SOC维持在20%-80%,柴油机日均运行时间<4小时,满足设计指标。文章详细说明了建模步骤、参数设置

xiaoheshang_123的博客 68

Qt C++ visitor模式

element.h #pragma once #include #include "visitor.h" class CEmployeePrivate; class CEmployee : public QObject { Q_OBJECT Q_CLASSINFO("Author","wdj") Q_ENUMS(ESex) Q_ENUMS(EGalatyTyp

thinkme2010的专栏 769

6-Halcon-- var_threshold 函数功能(用于基于局部统计特性的动态阈值分割的算子)

var_threshold 是 HALCON 中用于基于局部统计特性的动态阈值分割的算子,特别适用于处理低对比度图像或纹理均匀但包含细微差异的场景。与 dyn_threshold 不同,它不依赖预处理生成的参考图像,而是直接在局部区域内计算灰度值的统计特性(均值和标准差),从而自适应调整阈值。

weixin_45590420的博客 1326

Qt C++ 适配器模式

adapter.h #pragma once #include class CTarget { public: virtual void request(){qDebug() }; class CAdaptee { public: CAdaptee(){}; void specificalRequest(){qDebug() }; clas

thinkme2010的专栏 752

QGraphicsView通过鼠标操作来绘制图元

在Visio和MindManager等类似的图元操作软件中,很多时候我们会通过鼠标操作来添加自定义的图元。这里就介绍一下如何在QT的图形视图框架中通过鼠标绘制来添加图元。

yang1fei2的博客 3576

向华为学习——IPD流程体系之IPD术语

《IPD体系核心概念与业务术语解析》摘要: IPD(集成产品开发)是一种以市场为导向的结构化产品开发管理模式,通过跨部门协作、异步开发、CBB(通用构建模块)和管道管理等手段,实现产品全生命周期高效管理。体系包含七大核心要素:跨部门团队(如IPMT决策层、PDT执行层)、结构化流程(分阶段评审)、端到端项目管理(WBS分级计划)、客户需求分析、投资组合优化及质量管控(TR技术评审)。各业务领域术语涵盖财务(NPV、IRR)、开发(需求分解、基线化)、制造(可制造性设计)、采购(Sourcing团队)及市场(

cdfunlove的博客 482
上一篇: Qt C++ bridge模式(桥)
下一篇: Qt C++ composite模式
thinkme2010
博客等级 码龄16年 12粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值