- 博客(355)
- 收藏
- 关注
原创 【Q&A】QT有哪些享元模式的设计?
预定义静态对象(如颜色、字体)。资源缓存机制(如图像、字体数据库)。隐式共享(Copy-On-Write)技术。这些设计显著优化了内存使用和性能,尤其适合GUI应用中频繁创建相似对象的场景。
2025-03-31 19:47:06
366
原创 【设计模式】享元模式
享元(Flyweight) 模式也称蝇量模式,是一种结构型模式,解决的是面向对象程序设计的性能问题。所谓享元——被共享的单元或被共享的对象,其英文名Flyweight是“轻量级”的意思,指拳击比赛中选手体重比较轻。所以,该模式的作用是为了让对象变“轻”(占用的内存更少),其设计思想是:当需要某个对象时,尽量共用已经创建出的同类对象,从而避免频繁使用new创建同类或者相似的对象;在同类对象数量非常多的情况下,可以达到节省内存占用以及提升程序运行效率的目的。
2025-03-31 19:41:35
821
原创 【Q&A】QT有哪些状态模式的设计?
通过自定义状态类,可以灵活地定义不同状态下的行为。// 前向声明// 抽象状态类public:// 具体状态类Apublic:// 具体状态类Bpublic:// 上下文类private:public:// 具体状态类A的处理方法// 具体状态类B的处理方法i < 3;在这个示例里,State是抽象状态类,和是具体状态类,Context是上下文类。Context类持有当前状态,并且可以通过request。
2025-03-29 23:05:58
579
原创 【设计模式】状态模式
状态(State)模式是一种行为型模式,其实现可完成类似有限状态机的功能。换句话说,一个对象可以处于多种不同的状态(当然,同一时刻只能处于某一种状态),从而让对象产生不同的行为。通过状态模式可以表达出这些不同的状态并实现对象在这些状态之间的转换。状态模式最突出的特点是用类来表示状态,这一点与策略模式有异曲同工之妙(策略模式中用类来表示策略)。状态模式与策略模式从 UML 图上看完全相同,只不过两者所运用的场合以及所表达的目的不同。状态模式有一定的难度,不太好理解,请读者认真分析和理解范例代码。
2025-03-29 22:55:07
841
原创 【Q&A】为什么gl_Posision必须被赋值?
是 OpenGL 着色器语言(GLSL)里的一个内置变量,其类型为vec4。它代表的是顶点在裁剪空间(Clip Space)里的位置。裁剪空间是 OpenGL 渲染管线里一个至关重要的阶段,在这个阶段中,会对顶点进行裁剪操作,以此确定哪些顶点处于视锥体(也就是观察空间里可见的区域)内部,哪些处于外部。裁剪空间采用的是齐次坐标系统,这意味着是一个四维向量。xyz分别表示顶点在裁剪空间中的三个坐标轴上的坐标。w分量用于透视除法。在裁剪操作之后,OpenGL 会进行透视除法,把。
2025-03-24 20:41:03
309
原创 【Q&A】OpenGL的渲染流程是怎么样的?
OpenGL 的渲染流程是一个复杂的管线,它将输入的顶点数据经过一系列处理,最终转换为屏幕上的像素。
2025-03-24 20:15:03
604
原创 【Q&A】组合模式在Qt有哪些应用?
QDir 可以包含多个文件和子目录,这类似于组合模式中的树枝节点,而文件则类似于叶子节点。是Qt中绝大多数类的基类,它构建了一个树形的对象结构,这和组合模式的理念相契合。图形项可以包含子图形项,从而构建出复杂的图形场景。就像树枝节点,它可以包含多个文件(叶子节点)和子目录(新的树枝节点)。当父对象被销毁时,其所有子对象也会被自动销毁。构成了树形结构,根项可以有多个子项,子项也可以有自己的子项。子图形项的位置和变换是相对于父图形项的。,还可以包含子菜单,这形成了一个树形结构。作为子项,从而构建树形结构。
2025-03-24 16:21:35
645
原创 【设计模式】迭代器模式
引入面向对象程序设计的一个原则——单一职责原则(Single Responsibility Principle, SRP)一个类应该只有一个引起变化的原因,通俗地说,就是一个类的职责应该单一,应该只做一类事情或者对外只提供一种功能。
2025-03-24 14:37:22
1322
原创 【设计模式】命令模式
绘图软件:实现撤销、重做、日志记录等功能。遥控器控制:解耦遥控器与家用电器,灵活控制。任务调度:实现任务的定期调度执行。游戏系统:实现时光倒流、情景回放等功能。
2025-03-23 16:57:35
807
原创 【Q&A】外观模式在Qt中有哪些应用?
作为外观类,将底层多媒体播放的复杂操作封装起来,客户端代码只需要简单地设置媒体源并调用播放方法,就可以实现多媒体文件的播放,无需关心底层的音频解码、播放控制等细节。作为外观类,客户端代码只需要将按钮添加到布局中,而布局管理器会自动处理按钮的排列和大小调整,客户端无需关心每个按钮具体的位置和大小计算等细节。方法就可以弹出文件选择对话框并获取用户选择的文件路径,而不需要了解操作系统如何实现文件选择对话框的细节。等简单方法,就可以实现多媒体文件的播放控制,而不需要了解底层多媒体库的具体实现。
2025-03-23 12:55:41
396
原创 【Q&A】单件模式在Qt中有哪些应用?
单例设计模式确保一个类仅有一个实例,并提供一个全局访问点来获取该实例。在 Qt 框架中,有不少类的设计采用了单例模式,以下为你详细介绍并给出相应代码示例。
2025-03-22 22:18:24
407
原创 【设计模式】单件模式
意图:保证一个类仅有一个实例,并提供全局访问点。单件类 vs 全局变量:单件类通过封装保证单一实例,全局变量无法阻止多实例。多线程注意事项:优先在主线程初始化,或使用 C++11 局部静态变量特性。扩展限制:单件类难以继承,需谨慎设计。
2025-03-22 22:06:42
1148
原创 【Q&A】装饰模式在Qt中有哪些运用?
Qt在IO模块和图形模块中广泛使用装饰模式,既保证了底层设备的通用性,又通过灵活的装饰器实现了功能扩展。这种设计符合开闭原则,是学习结构型设计模式的经典案例。
2025-03-21 23:57:43
1276
原创 【Q&A】QT中事件和信号的区别以及联系是什么?
熟练掌握两者的关系,能让你在开发中根据场景选择最优方案,既保证灵活性又提高效率。是 GUI 编程的核心机制,它们既有联系又有本质区别。四个维度展开对比,并通过大量示例说明它们的关系。调用 mouseReleaseEvent。调用 mousePressEvent。系统生成 QMouseEvent。QPushButton 接收事件。触发 clicked 信号。
2025-03-20 19:42:12
1219
原创 【Q&A】emplace和emplace_back区别是什么?
如果你需要在容器的特定位置插入元素,或者使用关联容器,应该使用emplace。如果你只是想在顺序容器的尾部插入元素,使用会更简洁。
2025-03-20 19:41:41
302
原创 【Q&A】QT编译过程和C++编译过程的区别?
Qt编译过程在普通C++流程上扩展了UI处理资源嵌入和元对象代码生成三个阶段,依赖uicrccmoc等专用工具。这种设计虽然增加了编译复杂度,但显著提升了GUI开发效率和跨平台兼容性。普通C++编译则更直接,适用于底层或无需界面/动态绑定的场景。
2025-03-20 19:40:46
1018
原创 【Q&A】QT事件处理流程是怎么样的?
Qt信号的底层实现通过元对象系统提供动态元数据支持,MOC编译器生成类型安全的映射代码,结合事件队列和线程调度机制实现高效通信。其核心优势在于松耦合、跨线程支持及编译期类型检查,但也需注意性能敏感场景下的优化。
2025-03-20 19:40:16
1012
原创 【Q&A】QT信号槽底层是怎么实现的?
Qt信号的底层实现通过元对象系统提供动态元数据支持,MOC编译器生成类型安全的映射代码,结合事件队列和线程调度机制实现高效通信。其核心优势在于松耦合、跨线程支持及编译期类型检查,但也需注意性能敏感场景下的优化。
2025-03-20 19:39:39
719
原创 【Q&A】观察者模式在QT有哪些应用?
Qt通过信号与槽事件系统和事件过滤器原生支持观察者模式,适用于UI交互、多线程通信等场景。对于复杂业务逻辑,可手动实现接口和聚合关系,或通过全局单例类实现跨层级通信。这些机制共同体现了Qt在解耦对象交互、提升扩展性方面的设计优势。
2025-03-20 17:24:02
841
原创 【设计模式】观察者模式
在程序设计中,需要为某对象建立一种“通知依赖关系”,当该对象的状态发生变化时,通过公告或广播的方式通知一系列相关对象,实现对象之间的联动。但这种一对多的对象依赖关系往往会造成该对象与其相关的一系列对象之间一种特别紧密的耦合关系。观察者(Observer)模式是一种使用频率较高的行为型设计模式,可以弱化上述的一对多依赖关系,实现对象之间关系的松耦合。观察者模式在工作中往往会在不知不觉中被用到。
2025-03-20 16:43:39
914
原创 【Q&A】Qt中直接渲染和离屏渲染有什么区别
通过及其相关方法,能够在 Qt 中方便地实现 OpenGL 的直接渲染,开发者可以在paintGL方法中使用 OpenGL 函数进行各种图形的绘制。
2025-03-20 12:14:53
1069
原创 【Q&A】策略模式在QT有哪些应用
在 Qt 框架中,(Strategy Pattern)被广泛应用于多个模块,通过将算法或行为封装为独立的类,使得它们可以在运行时动态替换。
2025-03-20 12:13:39
1188
原创 【设计模式】策略模式
策略(Strategy) 模式是一种行为型模式,其实现过程与模板方法模式非常类似——都 是以扩展的方式支持未来的变化。本章通过对一个具体范例的逐步重构来详细讲解策略模 式,在此基础之上,引出面向对象程序设计的一个重要原则——依赖倒置原则,并对该原则 进行详细阐述。
2025-03-20 11:24:47
1432
原创 【Q&A】std::forward是怎么实现的?
通过引用折叠规则和实现了完美转发,能够在函数模板中保持参数的原始值类别,避免不必要的拷贝和移动操作,提高代码的性能和效率。
2025-03-19 21:11:52
516
原创 【Q&A】C和C++有哪些常用的调用约定
由于调用者在调用可变参数函数时知道具体传递的参数数量和大小,所以由调用者负责清理栈可以确保栈空间被正确恢复。而被调用者由于无法在编译时确定可变参数的具体情况,不适合负责栈清理工作。这就是为什么调用者清理栈的调用约定(如__cdecl)可以支持可变参数函数的原因。
2025-03-19 21:11:05
772
原创 【Q&A】CRTP在模板中有哪些用处?
CRTP(Curiously Recurring Template Pattern)即奇异递归模板模式,是 C++ 中的一种模板编程技术,它允许派生类将自身作为模板参数传递给基类。下面详细介绍 CRTP 技术在模板中的用途。在传统的多态实现中,通常使用虚函数来实现动态多态,这会带来一定的运行时开销(如虚函数表查找)。而 CRTP 可以实现静态多态,避免了运行时开销,在编译期就确定调用的函数。cpp解释在上述代码中, 是一个基类模板,它通过 将 指针转换为派生类 的指针,从而调用派生类的 函数。这
2025-03-19 21:10:31
270
原创 【Q&A】建造者模式在Qt有哪些应用
1. 产品类public:private:int m_age;2. 建造者类public:private:3. 使用示例.build();
2025-03-16 12:50:46
447
原创 【Q&A】原型模式在Qt有哪些应用?
场景实现方式优势QImageQString隐式共享 + 深拷贝减少内存占用,提升频繁复制操作的性能图形对象copy()方法确保样式独立修改,避免影响原对象自定义类或clone()灵活控制共享策略,支持复杂对象深拷贝通过原型模式,Qt 框架在保证对象独立性的同时,显著优化了内存使用和对象创建效率,尤其适用于需要频繁复制或共享资源的场景。
2025-03-16 12:29:58
336
原创 【Q&A】工厂模式在Qt有哪些应用?
设计模式 #Qt在原生 Qt 框架的设计里,工厂模式被广泛应用,它将对象的创建和使用进行分离,增强了代码的可维护性与可扩展性。
2025-03-16 11:38:57
564
原创 【Q&A】模板方法模式在Qt中有哪些应用?
在 Qt 框架中,模板方法模式(Template Method Pattern)被广泛应用于框架的设计中,通过定义算法骨架并允许子类在不改变结构的情况下重写部分步骤。
2025-03-16 11:26:50
388
原创 【设计模式】建造者模式
通过上述两个范例,不难看到,建造者设计模式主要用于分步骤构建一个复杂的对象,其中构建步骤是一个稳定的算法(构建算法),而复杂对象各个部分的创建则会有不同的变化。需要创建的产品对象内部结构复杂,产品往往由多个零部件组成。需要创建的产品对象内部属性相互依赖,需要指定创建次序。当创建复杂对象的步骤(过程)应该独立于该对象的组成部分(通过引入指挥者类, 将创建步骤封装在其中)。将复杂对象的创建和使用分离,使相同的创建过程可以创建不同的产品。
2025-03-15 20:48:07
896
原创 【设计模式】原型模式
同工厂模式一样,原型(Prototype) 模式也是一种创建型模式。原型模式通过一个对象 (原型对象)克隆出多个一模一样的对象。实际上,该模式与其说是一种设计模式,不如说是 一种创建对象的方法(对象克隆),尤其是创建给定类的对象(实例)过程很复杂(例如,要设 置许多成员变量的值)时,使用这种设计模式就比较合适。
2025-03-14 23:42:54
1352
转载 【解决方案】QT如何查看源码
由于整个Qt程序过于庞大,我们只需要查看我们想查看的相关类的子项目即可,比如我们常见的类QPushButton、QLabel、QWidget等类都在Src/qtbase/src路径下。的方式获取,即在通过exe安装Qt时,很多组件是可选的,这也包括是否选择安装Qt源码。如下图,在安装Qt时,选择Qt的Sources选项,然后完成安装,即可成功获取Qt的源码。通常情况下,如果我们没有下载Qt的源码,我们想查看某个类或者函数的实现时,只能查看类或函数的定义,具体实现是查看不了的。3.刷新一下配置的路径。
2025-03-14 17:44:08
114
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人