- 博客(156)
- 资源 (2)
- 收藏
- 关注
原创 电影解说短视频创作流程指南
ChatGPT(免费版):输入指令如"推荐10部近期讨论度高的悬疑电影,附带剧情亮点分析"最低配置:Intel i5 + 16GB RAM(可运行轻量ML模型)"/“没想到接下来…4K素材:Pixabay/Storyblocks(免费额度)用so-vits-svc(开源)克隆特定音色(需自训练模型)Perplexity.ai(免费):实时获取电影热度数据。云端算力:Google Colab(免费GPU资源)Pictory.ai(免费试用):自动生成高光片段。EbSynth(开源):将关键帧转化为动画效果。
2025-04-03 09:13:47
819
原创 界面架构 - MVVM (Qt)
在上述 MVVM 示例中:ViewModel 封装了业务逻辑(计算字符串长度),并通过 Q_PROPERTY 暴露输入文本(inputText)和计算结果(result)。当用户操作界面时,ViewModel 中的数据会更新,并通过信号通知 QML 自动刷新界面。View(QML 部分) 仅负责界面展示和用户交互,通过数据绑定与 ViewModel 建立联系。这样 View 完全不关心具体的业务逻辑,降低了耦合度。
2025-04-02 19:15:43
583
原创 界面架构 - 主流架构(Qt)
在 Qt 和 C++ 平台下,主流的界面和应用架构主要包括:MVC:Qt 内置的模型/视图框架即基于 MVC,适用于大多数标准桌面应用。MVP:通过引入 Presenter 层,进一步分离界面和业务逻辑,便于测试和维护。MVVM:特别适合基于 Qt Quick 和 QML 的项目,利用数据绑定实现高效的界面更新。选择哪种架构取决于项目规模、开发团队习惯以及对测试、维护和扩展性的要求。在简单项目中,直接使用 Qt 自带的 MVC 模型往往足够;
2025-04-02 16:17:43
637
原创 界面架构 - MVC和MVP异同
共同目标:都旨在分离数据、界面和业务逻辑,降低代码耦合,提高可测试性和可维护性。MVC 的特点:角色划分较为宽泛,View 可能具有一定的主动性;Controller 和 View 之间的交互方式较为灵活,但容易出现职责混淆的情况。MVP 的特点:View 尽可能被动,所有业务逻辑集中在 Presenter 中;数据流和控制更加明确,便于单元测试和维护,但相对实现复杂度较高。选择哪种架构要根据项目的复杂度、团队习惯以及对测试和扩展性的要求来决定。
2025-04-02 16:12:59
663
原创 界面架构- MVP(Qt)
在上述 MVP 示例中,我们将应用程序分为三个部分:Model 负责计算字符串的长度,不依赖于任何界面;View(MainWindow)构建用户界面,展示 QLineEdit、按钮和 QLabel,并实现 IView 接口,用于接收 Presenter 的更新通知;Presenter 接收 View 的操作请求,调用 Model 计算结果,再将结果传递回 View 更新界面。这种设计使得业务逻辑与界面展示彻底分离,便于单元测试 Presenter 以及在项目中对各模块进行独立开发和维护。
2025-04-02 16:01:41
770
原创 Qt - findChild
findChild 是 Qt 中一个非常实用的工具函数,利用模板和元对象系统的强大特性,能够方便地在复杂的对象树中查找特定类型和名称的子对象。无论是在 UI 动态构建、调试还是模块化开发中,都能极大地提高开发效率,减少手动管理子对象的繁琐工作。
2025-04-01 15:26:04
624
原创 C++ explicit 关键字
explicit 关键字是现代 C++ 提供的一个工具,用于控制类型转换行为。通过标记构造函数和转换运算符为 explicit,可以使代码在类型转换时更加严格、明确,从而减少隐式转换带来的意外问题。对于编写健壮、可维护的 C++ 代码来说,这是一个非常有用的特性。
2025-04-01 10:41:53
348
原创 C++ std::bitset
是 C++ 标准库中定义在头文件 中的一个类模板,用于表示固定大小的二进制位序列。它为位操作提供了一个简单而高效的接口,常用于需要处理大量布尔值、标志位、位运算和位掩码等场景。
2025-03-20 15:15:21
954
原创 C++ std::advance
std::advance 是一个灵活的迭代器操作函数,可以方便地移动迭代器,不需要手动编写复杂的循环代码来实现迭代器的前进或后退。它可以处理正向移动、负向移动、以及随机访问和双向迭代器的移动,具有广泛的适用性。对于 随机访问迭代器,std::advance 提供了非常高效的偏移操作,而对于 双向或前向迭代器,则是逐步移动,效率相对较低。
2025-02-27 14:11:20
987
原创 C++ std::function
std::function 是一个非常强大的工具,可以将不同类型的可调用对象统一封装并调用。它在需要高度灵活性的场景中非常有用,尤其是涉及回调和事件驱动的编程模式时。尽管它的性能可能略逊色于普通函数指针和直接的 Lambda 表达式,但它提供的高度抽象和灵活性使得它在许多高级用法中非常值得使用。
2025-02-27 11:49:08
650
原创 23种设计模式 - 备忘录模式
备忘录模式(Memento Pattern)是一种行为型设计模式,其核心是在不破坏对象封装性的前提下,捕获并保存对象的内部状态,以便后续恢复。该模式特别适用于需要实现撤销/重做、状态回滚等功能的系统,如数控系统的加工状态保存与恢复。
2025-02-19 09:48:52
371
原创 23种设计模式 - 访问者模式
访问者模式(Visitor Pattern)是一种行为型设计模式,其核心是将作用于对象结构的操作与对象本身解耦,允许在不修改现有类的前提下定义新操作。该模式适用于需要为复杂对象结构(如数控系统的组件)添加多种独立功能的场景。
2025-02-19 09:47:18
435
原创 23种设计模式 - 桥接模式
桥接模式(Bridge Pattern)是一种结构型设计模式,其核心是通过将抽象与实现分离,使两者可以独立扩展和变化。该模式通过组合替代继承,有效解决多维变化场景下的类爆炸问题,尤其适用于数控系统中硬件控制与软件逻辑解耦的场景。
2025-02-19 09:43:38
413
原创 23种设计模式 - 组合模式
组合模式(Composite Pattern)是一种结构型设计模式,通过将对象组织成树形结构,使客户端能够以统一的方式处理单个对象和组合对象。该模式特别适用于需要表示“部分-整体”层次结构的场景,例如数控系统中的多级组件管理。
2025-02-19 09:41:57
438
原创 23种设计模式 - 享元模式
享元模式(Flyweight Pattern)是一种结构型设计模式,通过共享技术减少大量相似对象的内存占用。它将对象状态分为内部状态(可共享的固有属性)和外部状态(随场景变化的属性),适用于数控系统中需要管理大量重复组件(如刀具、轴控制器)的场景。
2025-02-19 09:39:58
324
原创 23种设计模式 - 解释器模式
解释器模式(Interpreter Pattern)是一种行为型设计模式,用于为特定语言(如数控系统的G代码)定义文法规则,并构建解释器来解析和执行该语言的语句。它通过将语法规则分解为多个类,实现复杂指令的逐层解析。
2025-02-19 09:37:46
451
原创 23种设计模式 - 迭代器模式
迭代器模式(Iterator Pattern)是一种行为型设计模式,用于顺序访问聚合对象(如集合)的元素,而无需暴露其内部结构。该模式将遍历逻辑封装在独立的迭代器对象中,使客户端能够统一处理不同类型的集合(如数组、链表、树)。
2025-02-19 09:34:53
401
原创 23种设计模式 - 外观模式
外观模式(Facade Pattern)是一种结构型设计模式,通过为复杂子系统提供统一的简化接口,隐藏其内部复杂性,使客户端能够更便捷地调用子系统功能[1][4][6][9]。
2025-02-19 09:32:41
399
原创 23种设计模式 - 空对象模式
空对象模式(Null Object Pattern)是一种行为型设计模式,通过用无操作的空对象替代null值,消除客户端对空值的检查,避免空指针异常。其核心是让空对象与真实对象实现相同接口,但空对象不执行实际逻辑。
2025-02-19 09:31:01
409
原创 23种设计模式 - 责任链
责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,允许多个对象按链式顺序处理请求,直到其中一个对象处理为止。该模式将请求的发送者和接收者解耦,使多个对象都有机会处理请求。
2025-02-18 16:24:49
370
原创 23种设计模式 - 模板方法
模板方法模式(Template Method Pattern)是一种行为型设计模式,它通过定义算法的骨架(固定步骤),允许子类在不改变算法结构的情况下重写特定步骤。该模式的核心是将通用流程封装在基类中,通过继承实现扩展。
2025-02-18 16:15:06
428
原创 23种设计模式 - 原型模式
原型模式(Prototype Pattern)是一种创建型设计模式,它通过克隆现有对象来创建新对象,避免重复执行初始化逻辑[1][2][4]。该模式的核心是将对象创建过程委托给对象自身,通过统一的克隆接口实现灵活复制[3][6][8]。
2025-02-18 16:13:26
426
原创 23种设计模式 - 命令模式
命令模式(Command Pattern)是一种行为型设计模式,它将请求封装为独立对象,使请求的发送者与接收者解耦。通过将操作抽象为命令对象,支持命令的存储、传递、撤销和重做,增强系统的灵活性和可扩展性。
2025-02-18 16:11:41
339
原创 23种设计模式 - 状态模式
状态模式(State Pattern)是一种行为型设计模式,允许对象在其内部状态改变时动态调整行为,使对象的行为看起来像是修改了其类。该模式通过将状态相关的逻辑封装到独立的类中,避免了复杂的条件分支,提升代码的可维护性和扩展性。
2025-02-18 16:10:02
444
原创 23种设计模式 - 策略模式
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列可互换的算法,并将每个算法封装成独立类,使得算法可以独立于客户端变化。该模式的核心思想是解耦算法的定义与使用,适用于需要动态切换行为或算法的场景,例如数控系统中的加工策略选择。
2025-02-18 16:08:15
513
原创 23种设计模式 - 观察者模式
观察者模式(Observer Pattern)是一种行为型设计模式,定义了一对多的依赖关系:当一个对象(称为主题)状态变化时,所有依赖它的对象(称为观察者)会自动收到通知并更新。这种模式广泛用于事件驱动系统,如数控系统中的状态监控。
2025-02-18 16:06:20
369
原创 23种设计模式 - 代理模式
代理模式(Proxy Pattern)是一种结构型设计模式,通过引入代理对象控制对真实对象的访问。代理在客户端和真实对象之间充当中间层,常用于权限控制、延迟加载或远程访问等场景。
2025-02-18 16:04:34
488
原创 23种设计模式 - 装饰器模式
装饰器模式(Decorator Pattern)是一种结构型设计模式,允许动态地为对象添加新功能,而无需修改其结构。它通过将对象包装在装饰器类的实例中,实现功能的灵活扩展,符合开放/封闭原则。
2025-02-18 16:02:50
505
原创 23种设计模式 - 适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,用于解决接口不兼容问题。它通过将一个类的接口转换为客户端期望的接口,使原本因接口不匹配而无法协同工作的类能够协同工作。适配器模式分为类适配器(通过继承实现)和对象适配器(通过组合实现)两种类型。
2025-02-18 16:00:59
402
原创 23种设计模式 - 建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,它将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。其核心思想是分步骤构建复杂对象,并通过统一的接口控制构建流程,适用于需要灵活组合复杂组件且构建顺序稳定的场景(如数控系统的多模块配置)。
2025-02-18 15:58:40
474
原创 23种设计模式 - 抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,提供接口用于创建一组相关或相互依赖的对象家族,而无需指定具体类[2][3][5]。其核心是通过抽象工厂统一管理多个产品族的创建,确保产品之间的兼容性,适用于需要统一风格或约束的场景(如不同品牌的数控系统组件)。
2025-02-18 15:56:48
409
原创 23种设计模式 - 工厂方法模式
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,定义用于创建对象的接口,让子类决定实例化哪个类,从而将对象创建过程延迟到子类。其核心目的是解耦对象的创建与使用,增强系统的扩展性,符合开闭原则。
2025-02-18 15:54:58
802
原创 面向对象的7大设计原则
示例系统整合:数控系统通过上述原则实现模块化、可扩展的架构,例如新增运动类型(OCP)、传感器替换(LSP)、日志组合(CRP)等场景。定义:软件实体应对扩展开放,对修改关闭。说明:避免将温度监控和运动控制耦合在同一个类中[4][5]。说明:通过组合复用功能,避免继承导致的僵化[5][8]。说明:通过继承扩展新运动类型,无需修改原有代码。定义:高层模块不应依赖低层模块,二者应依赖抽象。说明:通过依赖注入解耦高层与具体存储实现。定义:客户端不应被迫依赖其不使用的接口。定义:对象应减少与其他对象的直接交互。
2025-02-18 15:49:22
396
原创 软件架构-41模型
软件架构的4+1视图模型由Philippe Kruchten于1995年提出,旨在通过多重视角描述复杂系统的架构,以满足不同利益相关者的需求并兼顾功能性与非功能性要求[2][3][8]。
2025-02-18 15:42:12
279
原创 多激光雷达定位
ICP是点云配准中的经典算法,通过最小化两个点云之间的欧式距离来实现对齐。算法流程从两个点云中选取最近邻点对。使用最小二乘法计算变换矩阵(旋转矩阵和位移矩阵)。根据变换矩阵更新点云位置,重复迭代,直至收敛。优点精度较高,适用于小范围点云的对齐。算法实现简单。缺点对初始对齐依赖较强。计算量大,不适合大规模数据。多激光雷达系统架构雷达布置:在车辆或机器人四周布置若干激光雷达,覆盖360度视角。每个激光雷达分配不同的扫描区域,以减少数据重叠和干扰。同步与时序管理。
2024-10-28 11:03:24
671
原创 Qt多线程
Qt 提供了多种方式来处理多线程编程,它不仅使多线程操作更易于管理,还与 Qt 的事件驱动架构紧密集成。下面是 Qt 多线程编程的详细介绍,包括关键类、模式以及常见的使用场景。
2024-08-29 14:22:00
1327
1
原创 工业软件架构5:(QT和C++实现)
通过使用QWaitCondition和QMutex,你可以灵活地控制任务的执行、暂停和继续。这样的设计适用于需要动态管理任务状态的应用场景,如需要中断并稍后继续的长时间运行任务。可暂停性: 任务可以在执行过程中被暂停,等待条件满足后再继续执行。可恢复性: 任务在暂停后可以继续从暂停点执行,而无需重新启动任务。线程安全: 使用QMutex确保状态检查和状态改变的线程安全,避免竞争条件。分步骤执行: 将任务分解为多个步骤,每个步骤之间插入状态检查点,确保任务能够响应暂停和继续操作。
2024-08-29 11:43:22
1383
原创 C++ lambda表达式
Lambda 表达式是 C++ 中非常强大和灵活的功能,允许在需要时定义小型匿名函数,特别适用于回调、并发操作和 STL 算法中。它们使代码更简洁,更易于维护。
2024-08-28 11:38:21
528
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人