自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(539)
  • 收藏
  • 关注

转载 相机SDK

相机SDK,全称为Software Development Kit,中文意思为“软件开发工具包”。SDK通常包含一些预先编写的代码、库、API接口等,以及相关的文档和示例,以便开发者能够快速、高效地开发出满足特定需求的应用程序。在相机领域,相机SDK通常包含与相机硬件和软件交互的代码和库,以便开发者可以在其应用程序中集成相机功能。原文链接:https://blog.csdn.net/weixin_43501408/article/details/135270937。

2024-07-04 17:36:15 114

转载 策略 模式

原文链接:https://blog.csdn.net/h8062651/article/details/136574981。

2024-07-04 16:46:18 28

转载 模板方法模式

经典设计模式大概有23种。设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。从定义可以看出,设计模式的使用有很多的局限性。一定要明确它解决什么问题,再使用它。当不清楚设计模式解决什么问题时不要轻易使用。通俗的讲,设计模式是解决软件开发过程中一些问题的固定套路。不要过度的封装或使用设计模式,除非明确了需求的具体变化方向,而且变化方向的点是反复的出现,才会使用设计模式;即慎用设计模式。设计模式要到达一定的工程代码量才能精通。但是,了解设计模式是需要的。

2024-07-04 11:22:05 53

原创 ComboBox控件如果有两个相同的项,并且你选择了第二个,再次打开下拉列表时,它可能不会定位到你选择的上面第一个项问题

通知,但如果ComboBox中有两个相同的项,并且你选择了第二个,再次打开下拉列表时,它可能不会定位到你选择的第二个项。这是因为ComboBox控件没有一个直接的方式来识别和定位到正确的选择,因为它们的索引是基于0开始的,并且不保留选择的状态。请注意,这个例子假设你已经在你的对话框类中添加了相应的消息映射和更新控件状态的函数。你可能还需要在实际的应用程序中添加更多的错误检查和处理逻辑,以确保程序的健壮性。为了解决这个问题,你可以手动跟踪选择的项,并在下拉列表打开时重新应用选择。Drop List有效!

2024-07-04 10:18:40 261

转载 享元 模式

享元模式(Flyweight Pattern)是一种结构型设计模式,它旨在减少对象的数量,从而降低内存和性能消耗。享元模式的核心思想是共享相同状态的多个对象,而不是为每个对象都分配独立的内存。

2024-07-03 10:31:06 27

转载 装饰器模式

在 C++ 中,装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活,它可以在不修改现有类结构的情况下增加新的功能。这个接口是装饰器模式中的关键部分,因为它允许装饰器和组件对象以统一的方式工作。具体装饰器类实现了装饰器接口,并且可以在其操作中添加额外的功能,同时调用组件对象上的操作。(4)具体装饰器(Concrete Decorator): 实现了装饰器接口或抽象类的具体类。2 装饰器模式的实现步骤。

2024-07-02 13:26:46 28

原创 c++装饰器模式 和 多重继承区别

在这两种模式中,你都可以添加新的功能,但装饰器模式提供了更好的封装性和灵活性,而多重继承可以直接添加更多的接口。装饰器模式在某些情况下更加清晰和可扩展,但多重继承可以在一些情况下提供更直接的访问和更高的效率。装饰器模式通常用于向对象添加额外的职责,而不会影响其他用户,它遵循“开放-封闭”原则。2.装饰器模式通常使用组合(即一个装饰器包含一个被装饰的对象),而多重继承可以使用多重继承或虚拟继承(用于解决多重继承带来的问题)。在C++中,装饰器模式和多重继承。

2024-07-02 11:25:52 303

转载 建造者模式

首先,定义 Product 类,它表示最终要构建的对象。public:private:public:然后,创建实现 HouseBuilder 接口的 ConcreteBuilder 类。

2024-06-27 17:36:37 42

转载 原型 模式

原文链接:https://blog.csdn.net/h8062651/article/details/136289765原型模式(Prototype Pattern)是一种创建型:通过来。

2024-06-27 11:09:56 103

转载 Qt设计模式:状态模式 与 状态机框架

Qt状态机框架采用不同的类(如QAbstractState、QState、QStateMachine等)来表示状态机中的相关组件。QAbstractState和其子类代表了抽象状态类和具体状态类。QStateMachine本身充当上下文(Context)类,负责底层事件循环和状态切换管理。虽然Qt状态机框架引入了信号槽机制和事件循环等特性,不过其核心设计仍然保留了状态模式的原则。

2024-06-25 10:56:08 74

原创 CTime 类的 Format函数注意事项

CTime 类 的Format函数和CDateTimeCtrl类的SetFormat函数的参数形式是一样的。原文链接:https://blog.csdn.net/u012782049/article/details/26808773。根据相关的文档使用相应的函数。MM表示用两位来表示月。(月用大写的MM表示)yyyy表示用四位数来表示年。

2024-06-21 16:53:02 542

原创 状态 模式

State的定义:不同的状态,不同的行为;或者说,每个状态有着相应的行为。

2024-06-21 11:16:51 867

原创 QT设计模式:备忘录模式

备忘录模式主要有三个参与者:发起人(Originator)、备忘录(Memento)和负责人(Caretaker)。类兼任了备忘录模式的Caretaker类和命令模式的Invoker类。所以实际上,命令模式和备忘录模式,可以简单理解为在命令模式的基础上增加一个。类兼任了备忘录模式的Originator类和命令模式的Receiver类,类需要存储所有的状态,如果状态相关的数据对象越来越多,可能会导致。(负责人),负责管理撤销和重做操作,维护命令的历史记录。的字体和颜色,那么这个过程就简单的多了。

2024-06-20 10:40:14 446

原创 备忘录模式

(2)易于管理历史状态: 通过保存对象的多个备忘录,可以轻松地实现状态的回滚或切换到之前的某个状态,这对于需要保存用户操作历史或实现撤销/重做功能的系统来说非常有用。(2)可能泄露实现细节: 尽管备忘录模式可以保护对象的封装性,但如果备忘录的实现不小心暴露了过多的内部状态细节,那么这些细节可能会被不当地使用,从而破坏对象的封装性。使用备忘录模式,可以方便地实现这一功能。(1)封装性: 备忘录模式可以很好地支持对象的封装性,因为状态的保存和恢复都是在对象内部完成的,外部代码无法直接访问或修改对象的内部状态。

2024-06-19 11:13:48 1137

转载 QT设计模式:命令模式

撤销栈用于存储撤销过的命令,当调用redo()方法时,会从撤销栈中弹出命令并执行其redo操作,同时该命令会被压回主栈。对于命令的接收者QTextEdit,我们也不需要关注它的源码,因为它的功能就是一个文本编辑器,我们只需要知道它提供了setPlainText()和toPlainText()等函数供我们在MyCommand中使用就可以了。需要注意的是,在标准的命令模式中,通常只有一个存储命令对象的容器,可以是是队列或栈,也可以仅仅是只是单个命令对象(如我们一开始给出的命令模式的示例)。

2024-06-17 16:04:45 66

转载 命令 模式

此外,如果一个操作需要由多个子操作构成,而这些子操作需要被打包在一起作为一个单独的事务来执行,命令模式可以帮助实现这一功能。通过命令模式,遥控器和具体命令之间实现了解耦,可以很方便地扩展新的命令或修改命令的实现方式。命令模式的核心思想是通过命令对象来封装请求。总的来说,命令模式的应用场景主要在于解耦请求与实现,封装接收方具体命令的实现细节,使得请求方的代码架构稳定,具备良好的扩展性。4.队列请求:当需要将请求排队,例如用户界面中的点击事件或网络请求,命令模式可以将这些请求封装为对象并放入队列中等待处理。

2024-06-17 15:14:48 32

原创 CTime和CString之间的转换

sscanf(timestr.GetBuffer(timestr.GetLength()),"%d年%d月%d日",&a,&b,&c);//将时间字符串“20191105161021”,格式化为“年月日时分秒”就是以"2006-11-27 23:30:59"的格式.注意:使用如下 sscanf方法不可行!一、CString->CTime的方法。二、CTime->CString。//取得CTime中的日期。//取得CTime中的时间。

2024-06-14 09:55:02 562

原创 事件传播机制 与 责任链模式

至此,我们已经解析了Qt的对象树机制,构建在对象树机制之上的事件传递机制,以及它们背后的设计思想。在后续的文章中,我们可能还会继续解析Qt源码中事件机制相关的设计模式。事件机制确实是Qt中的核心机制之一,我们能够深挖的东西,恐怕还有很多。原文链接:https://blog.csdn.net/buhuiCyvyan/article/details/138793057。

2024-06-13 14:48:06 888

转载 责任链模式

参考原文:https://blog.csdn.net/h8062651/article/details/136639291。

2024-06-13 13:59:40 28

转载 模型/视图框架 与 代理模式

Qt中的模型/视图框架属于是Qt中比较难学难用的一块知识,其中涉及的类也使用了许多的设计模式和设计技巧,在后续的文章中我们还会提到Qt的模型/视图框架。把这块硬骨头啃下来,相信能大大提升程序员的C++开发能力。

2024-06-12 12:56:11 43

转载 媒体播放框架 与 外观模式

与组合模式一样,外观模式实际上更显得“不值一提”。当我们学习任何一门OO语言时,都会使用外观模式。但实际上,在日常编程中很容易就会将一个类在逻辑上的所有组成部分都塞到一个类的实现里面,造成类的实现过大,接口过于复杂。外观模式是单一职责原则和最少知道原则的完美体现。我们应有意识地去通过创建子系统类,通过组合/聚合的方式组织在一起,并提供简单的接口对外界隐藏复杂性。而这个过程,就是实现外观模式。

2024-06-05 16:51:10 37

转载 外观 模式

原文链接:https://blog.csdn.net/h8062651/article/details/136546965。

2024-06-05 15:35:48 36

转载 QObject对象树机制 和 组合模式

每个 QObject 都可以有(至多)一个父 QObject ,且可以拥有任意数量的子 QObject, 换句话说,每个子对象的类 型必须是 QObject 或者必须派生自 Q Object。任何一个QObject 对象都可以组成一个树形结构,每个节点都是一个 QObject 对象,子节点可以是其他 QObject 对象。每个 QOb ject 父对象都会管理自己的子对象, 这就意味着,在调用 QObject 的析构函数时会自动销毁该对象的子对象。每个父对象都知道它的子对象的地址。

2024-06-05 13:40:58 47

转载 组合 模式

3)难以限制组件类型:在组合模式中,组合对象可以包含其他组合对象或叶子对象。3)统一操作接口:组合模式定义了统一的操作接口,使得客户端可以一致地处理单个对象和组合对象,无需关心具体对象的类型。1)简化客户端代码:组合模式使得客户端可以统一对待单个对象和组合对象,无需区分它们的类型,从而简化了客户端的代码。(2)当你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就可以考虑组合模式;通过组合模式,我们可以以统一的方式管理和操作公司的组织结构,从而简化了代码的使用和维护。

2024-06-05 13:14:45 34

转载 QT绘图系统 与桥接模式

可以看到,桥接模式很好地体现了依赖倒转原则(Dependency Inversion Principle,DIP)。依赖倒转原则是面向对象设计中的一个重要原则,它要求高层模块不应该依赖低层模块,而是应该依赖于抽象。而桥接模式正是通过将实现部分抽象化,使得抽象部分和实现部分可以独立地变化,从而实现了高层模块对低层模块的解耦,符合了依赖倒转原则。具体来说,在桥接模式中,抽象部分和实现部分分别由两个抽象类或接口来定义,并通过一个桥接接口来将它们连接起来。

2024-06-04 17:20:10 61

转载 桥接 模式

这种设计降低了类之间的耦合度,因为添加新的媒体播放器或媒体文件类型只需要创建新的实现类,而不需要修改桥接类或其他现有类。每种类型和分类的组合都需要创建一个新的类,导致类的数量剧增。而桥接模式可以将类型和分类分别抽象为两个独立的接口,并通过组合的方式将它们组合在一起,从而实现灵活的扩展。在这个例子中,桥接模式允许独立地扩展形状和颜色的类,而不需要为每一种形状和颜色的组合创建新的类。在 C++ 中,桥接模式通过将一个抽象部分与它的实现部分分离,使得它们可以独立地变化,从而降低了类之间的耦合度。

2024-06-04 16:06:26 72

原创 VisualStudio中:如果某个项目不显示SVN的show log等,而其他项目都正常

VisualStudio中:如果某个项目不显示SVN的show log等,而其他项目都正常。说明大概率是当前项目的问题,而不是VisualStudio的问题!1.这个项目内有一个“隐藏”文件夹.svn =》先删除!2.如果外层文件夹有红色感叹号,先删除。

2024-06-03 16:58:49 206

原创 Qt源码中的设计模式:

原文链接:https://zhuanlan.zhihu.com/p/631326161

2024-06-02 20:12:33 104

原创 Qt 的 d_ptr (d-pointer) 和 q_ptr (q-pointer)解析;Q_D和Q_Q指针

一方面,Qt在公类中定义了一个指针d_ptr指向私类,在宏Q_DECLARE_PRIVATE中定义了一个函数获取这个指针,用宏Q_D将这个指针重新命名为d,以便于访问私类对象。另一方面,Qt在私类中定义了一个指针q_ptr指向公类,在宏Q_DECLARE_PUBLIC中定义了一个函数获取这个指针,用宏Q_Q将这个指针重新命名为q,以便于访问公类对象。此时,就需要用到Qt定义的4个宏:Q_DECLARE_PRIVATE与Q_DECLARE_PUBLIC、Q_D和Q_Q。Qt中大量使用Q_D和Q_Q。

2024-06-02 19:34:17 1214 1

原创 适配器模式

(可以把适配器模式理解成拓展坞,起到转接的作⽤,原有的接⼝是USB,但是客户端需要使⽤type-c , 便使⽤拓展坞提供⼀个type-c 接⼝给客户端使⽤)适配器模式Adapter 是⼀种结构型设计模式,它可以将⼀个类的接⼝转换成客户希望的另⼀个接⼝,主要⽬的是充当两个不同接⼝之间的桥梁,使得原本接⼝不兼容的类能够⼀起⼯作。不同的项⽬和库可能使⽤不同的⽇志框架,不同的⽇志框架提供的API也不同,因此引⼊了适配器模式使得不同的API适配为统⼀接⼝。类适配器通过多重继承实现,而对象适配器通过组合实现。

2024-05-30 14:57:54 1039

原创 代理 模式

这里就可以运用代理模式,在打开文档时,并不打开图形对象,而是打开图形对象的代理以替代真实的图形。通过这种方式,被代理的对象(RealSubject)可以在运行时动态改变,需要控制的接口(Subject接口)可以在运行时改变,控制的方式(DynamicSubject类)也可以动态改变,从而实现了非常灵活的动态代理关系。在真实对象创建成功之前虚拟代理 扮演真实对象的替身,而当 真实对象创建之后,虚拟代理将用户的请求转发给真实对象。代理模式指代理控制对其他对象的访问,也就是代理对象控制对原对象的引⽤。

2024-05-28 15:02:49 1072

原创 观察者模式Observer

例子:基于同一组数据,生成了很多不同的界面来显示,有曲线图显示方式,有圆饼图显示方式,有柱状图显示方式等等…,当底层数据发生改变时,所有基于同一组数据的图像显示都需要修改图像,那么此时有两种实现方式所有图形界面模块都去观察底层数据是否做了改变,如果变化,那么读取数据,修改图像显示。

2024-05-28 10:18:58 718

原创 简述MVC模式

一般来说,MVC模式就是通过Controller控制层监听用户的请求事件,通过访问Model数据层,对数据进行相应的增删改查操作,然后找到合适的View视图用相应的数据进行渲染生成最终的显示视图(可以是图形界面,html web页面,json,protobuff等等),然后再把视图返回给用户。C:指的是Controller,控制层,表示监听用户事件交互,分发处理事件模块。M:指的是Model,数据模型层,表示系统底层的数据操作模块。V:指的是View,视图显示层,表示系统对于数据的展示模块。

2024-05-28 09:13:13 500

转载 理解软件风格/模式

架构模式,也叫架构风格,一个架构模式描述软件系统里的基本的结构组织或纲要。架构模式提供一些呈现定义好的子系统,指定它们的责任,并给出把它们组织在一起的法则和指南。一个架构模式常常可以分解成很多个的联合使用。就属于架构。在软件开发中,架构在塑造软件系统的结构和行为方面起着至关重要的作用。它提供了系统设计的蓝图,详细说明了组件如何相互交互以提供特定的功能。然而,由于可用的架构风格和模式多种多样,可能需要时间来辨别哪种方法最适合特定的项目或系统。本文旨在阐明这些概念,帮助您在架构工作中做出明智的决策。

2024-05-28 09:04:41 47

转载 如何选择 架构模式

这样只要是用户的操作,就能自动根据配置struts-config.xml转发到用户对象的方法上,而结果的更新,通过JSP的标记自动的刷新出来。这些新闻除了简单的放上网站以外,互相直接的内容关系,还是网站编辑们组织栏目,整理专题所需要的。管道和过滤器的例子在软件界则更加的多,比如我们最常见的Unix Shell系统,每个进程都被赋予了stdin/stdout/stderr这样的三个“出口”,因此每个进程都可以作为一个过滤器存在,而竖线“|”符号则可以把这样多个“过滤器”直接组合成一个处理管道。

2024-05-27 11:16:38 39

转载 几个容易混淆的术语:框架、模式、架构、构件、组件、中间件

spring解决的范围就广了,它的web组件同样用于解决前端开发,而ioc容器则用于解决 对象之间的解耦与分离,AOP则更是将对象方法之间的协作问题提升到神不知鬼不觉的情况下解决掉(牛啊),当然,spring还有持久化,缓存,事务等方面的专门解决组件,是通过对其它著名框架的集成而得到的。构件分为构件类和构件实例,通 过给出构件类的参数,生成实例,通过实例的组装和控制来构造相应的应用软件,这不仅大大提高了软件开发者的开发效率,也大大提高了软件的质量。而且,框架一般是成熟的,不断升级的软件。

2024-05-26 16:59:06 144

原创 Model/View架构中:自定义Model

在很多模型中,返回的flags应该包括Qt::ItemIsEnabled和Qt::ItemIsSelectable,表示模型中的元素是可以被访问和选择的。重新实现这四个函数,因为列表只有1列。这个函数返回模型索引index的底层数据(一个模型索引包括某一元素的信息,包括行,列,以及数据),用于视图和委托访问数据。通常情况下,函数应该返回true如果操作成功,但是如果只是部分操作成功,例如只插入了部分行,则需要返回false。这个函数返回被给的模型索引下有多少行,返回的是parent的孩子数。

2024-05-24 17:34:29 683

原创 QWidgetAction的用法

原文链接:qwidgetaction的用法 - 百度文库

2024-05-20 11:01:43 140

转载 Qt中:Q_DECLARE开头的 宏的用法

Qt通过Q_DECLARE开头的几个宏及几个qRegister开头的函数向Qt元系统注册一些非基本类型。一旦注册后,在Qt元系统中就可以很方便的利用这些非基本类型,这样对编程中的数据交互很方便。非基本类型是指除了一些基本类型之外的类型,如:除了int、float、qint......之外的类型,如:自定义类、结构体、枚举等。qRegister开头的函数用法参见如下:Qt中以qRegister开头的几个函数的用法说明。

2024-05-15 13:56:30 36

原创 QVariant

QVariant 可以保存很多Qt的数据类型,包括QBrush、QColor、QCursor、QDateTime、QFont、QKeySequence、 QPalette、QPen、QPixmap、QPoint、QRect、QRegion、QSize和QString,并且还有C++基本类型,如 int、float等。当您需要存储不同类型的数据时,可以使用QVariant。QVariant是Qt中一个强大的变体类,提供了一种通用的方式来存储Qt对象及其他类的值,可以以类似于指针的方式存储任意类型的值。

2024-05-15 13:44:08 951

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除