- 博客(62)
- 收藏
- 关注
原创 QT信号和槽怎么传输自己定义的数据结构
在 Qt 中,信号(Signal)和槽(Slot)机制默认支持许多内置类型(如。如果自定义数据结构较大或需要共享所有权,可以使用智能指针。将自定义类型序列化为字节流(如 JSON、二进制),通过。(如结构体、类对象),需要额外处理。是 Qt 的通用数据容器,可以存储任意类型。,可以直接以指针形式传递(需注意对象生命周期管理)。:让信号槽系统能处理该类型(跨线程时必须调用)。更轻量,但功能有限(不能直接定义信号槽)。适用于复杂对象,但需谨慎处理生命周期。(如 QML 访问)。(平衡易用性与功能)。
2025-07-31 16:02:40
680
原创 QT 动态属性和静态属性
动态添加的属性,不需要在类声明中预先定义。适用于 UI 组件(如 QWidget)的临时标记或数据传递。宏在类的声明中定义的,通常用于类的正式接口,可以被。,它们的区别主要在于定义方式、存储方式和使用场景。属性是类的核心部分,需要信号通知或 QML 绑定。是灵活、临时的扩展机制,适合 UI 或临时需求。识别,支持信号与槽、属性绑定、动态查询等特性。适用于长期存在的属性,通常与类的核心功能相关。是强类型、高性能的正式接口,适合长期使用。声明,适用于临时或扩展性需求。临时存储数据,避免修改类定义。
2025-07-31 15:54:04
373
原创 QString 内存机制详解
QString 通过和:当字符串长度较小时,每次以固定步长进行扩容。具体而言,在字符串长度不超过20时,每次会增加4个字符的空间。:当字符串长度介于20和4084之间时,采用指数级增长策略,即每次将内存大小翻倍进行扩充,以满足快速增长的需求。:一旦字符串长度达到或超过4084,每次增加固定的2048个字符空间,这种策略有助于应对大规模字符串的操作需求。
2025-07-30 11:03:25
588
原创 TCP面试
------ SYN (seq=x) ---------------->| # 第一次握手。|------ 数据传输 ------------------->| # 连接建立,开始通信。|<---- SYN-ACK (seq=y, ack=x+1) ----| # 第二次握手。|------ ACK (ack=y+1) ------------->| # 第三次握手。1.确认号ack=x+1(表示已收到客户端的seq=x)。1.确认号ack=y+1(表示已收到服务器的seq=y)。
2025-07-30 10:33:56
1464
原创 设计模式十四:适配器模式(Adapter Pattern)
1、Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。2、GoF 23 定义了两种Adapter模式的实现结构:对象适配器和类适配器。但类适配器采用“多继承”的实现方式,一般不推荐使用。对象适配器采用“对象组合”的方式,更符合松耦合精神。3、Adapter模式可以实现的非常灵活,不必拘泥于Gof23中定义的两种结构。例如,完全可以将Adapter模式中的“现存对象”作为新的接口方法参数,来达到适配的目的。
2025-07-30 09:08:47
462
原创 设计模式十三:代理模式(Proxy Pattern)
1、“增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段。2、具体proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象做细粒度的控制,如copy-on-write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做proxy。3、Proxy并不一定要求保持接口完整的一致性,只要能够实现间接控制,有时候损及一些透明性是可以接受的。
2025-07-29 19:43:02
493
原创 设计模式十二:门面模式 (FaçadePattern)
门面模式是一种结构型设计模式,它为复杂的子系统提供了一个简化的接口,隐藏了系统的复杂性,使客户端更容易使用。
2025-07-28 19:05:34
468
原创 C++对象模型
C++对象模型是C++语言中关于对象如何在内存中布局和如何工作的底层机制。理解C++对象模型对于编写高效、正确的C++代码非常重要。
2025-07-26 18:37:14
570
原创 设计模式十一:享元模式(Flyweight Pattern)
享元模式是一种结构型设计模式,它通过共享对象来最小化内存使用或计算开销。这种模式适用于大量相似对象的情况,通过共享这些对象的公共部分来减少资源消耗。
2025-07-26 17:58:08
513
原创 设计模式十:单件模式 (Singleton Pattern)
特性饱汉模式饿汉模式初始化时机第一次调用getInstance()时程序启动时线程安全需要额外处理天生线程安全资源占用按需分配,节省资源始终占用资源实现复杂度较复杂(需处理线程安全)较简单适用场景初始化耗时或资源占用大的对象初始化快且一定会使用的对象。
2025-07-25 19:44:58
582
原创 设计模式九:构建器模式 (Builder Pattern)
1、在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?构建器模式在C++中特别适合用于创建配置复杂的对象,特别是当对象有许多可选组件时。定义:构建器模式是一种创建型设计模式,它允许您分步骤创建复杂对象,使得相同的构建过程可以创建不同的表示。
2025-07-23 19:39:05
438
原创 设计模式 八:原型模式 (Prototype Pattern)
如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?1、在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。原型模式在C++中特别有用,因为它可以利用拷贝构造函数和赋值操作符来实现克隆操作,同时结合智能指针可以很好地管理内存。原型模式是一种创建型设计模式,它允许通过复制现有对象来创建新对象,而不是通过构造函数创建。:不需要为每种对象创建专门的子类。
2025-07-23 19:16:06
444
原创 QT RCC 文件
RCC (Qt Resource Compiler) 是 Qt 框架中的一个工具,用于将资源文件(如图像、音频、翻译文件等)编译成二进制格式,并嵌入到应用程序可执行文件中。
2025-07-22 15:44:46
452
原创 抽象类不能实例化原因
纯虚函数使类成为抽象类。抽象类不能实例化,因为它的纯虚函数没有实现。抽象类的作用是强制派生类实现接口,提供多态的基础。这种机制保证了C++的多态性和接口设计的严谨性。
2025-07-21 19:49:04
406
原创 设计模式六:工厂模式(Factory Pattern)
定义一个创建对象的接口,但让子类决定实例化哪个类。缺点:每增加一个产品就要增加一个工厂类。优点:符合开闭原则,扩展性好。
2025-07-21 19:38:57
255
原创 C++ RAII(资源获取即初始化)
RAII(Resource Acquisition Is Initialization,资源获取即初始化)是C++中一种重要的编程范式,用于管理资源(如内存、文件句柄、网络连接等)的生命周期。
2025-07-18 09:34:35
334
原创 设计模式四:装饰模式(Decorator Pattern)
装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。
2025-07-17 19:35:22
469
原创 设计模式三:观察者模式 (Observer Pattern)
观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象(称为"主题"或"可观察对象")的状态发生改变时,所有依赖它的对象(称为"观察者")都会自动收到通知并更新。
2025-07-16 19:35:34
372
原创 设计模式二:策略模式 (Strategy Pattern)
策略模式是一种行为设计模式,它定义类一系列算法,并将每个算法封装起来,使它们可以互相替换,且算法 的变化不会影响使用算法 的客户端。
2025-07-15 19:26:10
394
原创 C++ 读写锁
读写锁(Read-Write Lock)是一种特殊的同步机制,它允许多个线程同时读取共享资源,但在写入时则需要独占访问。C++标准库从C++14开始提供了和来实现读写锁功能。
2025-07-15 17:58:20
357
原创 设计模式一: 模板方法模式 (Template Method Pattern)
模板方法模式是一种行为设计模式,它通过定义一个算法的骨架,而将一些步骤延迟到子类中实现。Template Method 使得子类可以不改变(复用)一个算法结构 即可重定义(override 重写)该算法的某些特定步骤。
2025-07-15 16:39:15
321
原创 设计模式开篇:设计模式的七大核心原则
原则关键目标实现手段单一职责原则 (SRP)高内聚拆分职责开闭原则 (OCP)可扩展性抽象与多态里氏替换原则 (LSP)继承安全性子类行为一致性接口隔离原则 (ISP)接口最小化拆分接口依赖倒置原则 (DIP)解耦依赖抽象迪米特法则 (LoD)降低耦合减少交互合成复用原则 (CRP)灵活复用优先组合这些原则是设计模式的基础,实际应用中需根据场景权衡,而非机械遵循。
2025-07-15 10:50:18
1009
原创 QWidget 和 QML 的本质和使用上的区别
QWidget 和 QML 是 Qt 框架中两种不同的 UI 开发技术,它们在底层实现、设计理念和使用场景上有显著区别。使用声明式语法(类似 JSON)描述界面,逻辑部分可结合 JavaScript 或 C++。支持响应式布局、动画、3D 效果,适合触摸屏和移动端(如汽车仪表盘、手机 App)。利用 GPU 加速,适合流畅动画和动态效果(如属性绑定、状态切换)。跨移动端(Android/iOS)或嵌入式设备(如医疗设备界面)。适合静态布局和复杂业务逻辑的桌面应用(如 IDE、数据库工具)。
2025-07-14 18:22:57
483
原创 C++ static 关键字详解
使用方式主要用途生命周期作用域静态局部变量保持函数调用间的状态程序整个运行期函数内部静态成员变量类级别的共享数据程序整个运行期类作用域静态成员函数不依赖实例的操作类作用域静态全局变量文件内部私有数据程序整个运行期文件内部静态全局函数文件内部私有函数文件内部。
2025-07-11 09:34:34
453
原创 C++ 右值引用 (Rvalue References)
右值引用是C++11引入的革命性特性,它彻底改变了C++中资源管理和参数传递的方式。下面我将从多个维度深入讲解右值引用。
2025-07-10 16:20:15
450
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅