自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 如何定义一个只能在堆上或栈上生成对象的类

在C++中,可以通过特定的技术手段来控制对象只能在堆(heap)或栈(stack)上创建。

2025-07-15 20:01:11 139

原创 设计模式二:策略模式 (Strategy Pattern)

策略模式是一种行为设计模式,它定义类一系列算法,并将每个算法封装起来,使它们可以互相替换,且算法 的变化不会影响使用算法 的客户端。

2025-07-15 19:26:10 149

原创 C++ 读写锁

读写锁(Read-Write Lock)是一种特殊的同步机制,它允许多个线程同时读取共享资源,但在写入时则需要独占访问。C++标准库从C++14开始提供了和来实现读写锁功能。

2025-07-15 17:58:20 145

原创 设计模式一: 模板方法模式 (Template Method Pattern)

模板方法模式是一种行为设计模式,它通过定义一个算法的骨架,而将一些步骤延迟到子类中实现。Template Method 使得子类可以不改变(复用)一个算法结构 即可重定义(override 重写)该算法的某些特定步骤。

2025-07-15 16:39:15 192

原创 设计模式开篇:设计模式的七大核心原则

原则关键目标实现手段单一职责原则 (SRP)高内聚拆分职责开闭原则 (OCP)可扩展性抽象与多态里氏替换原则 (LSP)继承安全性子类行为一致性接口隔离原则 (ISP)接口最小化拆分接口依赖倒置原则 (DIP)解耦依赖抽象迪米特法则 (LoD)降低耦合减少交互合成复用原则 (CRP)灵活复用优先组合这些原则是设计模式的基础,实际应用中需根据场景权衡,而非机械遵循。

2025-07-15 10:50:18 716

原创 QWidget 和 QML 的本质和使用上的区别

QWidget 和 QML 是 Qt 框架中两种不同的 UI 开发技术,它们在底层实现、设计理念和使用场景上有显著区别。使用声明式语法(类似 JSON)描述界面,逻辑部分可结合 JavaScript 或 C++。支持响应式布局、动画、3D 效果,适合触摸屏和移动端(如汽车仪表盘、手机 App)。利用 GPU 加速,适合流畅动画和动态效果(如属性绑定、状态切换)。跨移动端(Android/iOS)或嵌入式设备(如医疗设备界面)。适合静态布局和复杂业务逻辑的桌面应用(如 IDE、数据库工具)。

2025-07-14 18:22:57 199

原创 C++ auto 关键字详解

auto是 C++11 引入的关键字,用于自动类型推导,让编译器根据初始化表达式自动推断变量的类型。

2025-07-14 13:56:04 126

原创 C++ lambda表达式

Lambda 表达式是 C++11 引入的一种匿名函数特性,它允许你在需要函数的地方内联定义函数,而无需单独命名。

2025-07-14 10:57:40 203

原创 C++ const 关键字解析

这些值在程序运行期间不能被修改必须在定义时初始化。

2025-07-12 13:11:48 309

原创 C++ static 关键字详解

使用方式主要用途生命周期作用域静态局部变量保持函数调用间的状态程序整个运行期函数内部静态成员变量类级别的共享数据程序整个运行期类作用域静态成员函数不依赖实例的操作类作用域静态全局变量文件内部私有数据程序整个运行期文件内部静态全局函数文件内部私有函数文件内部。

2025-07-11 09:34:34 320

原创 C++ 指针数组和数组指针的概念

数组里存指针,用于管理多个独立对象(如字符串数组)。

2025-07-11 09:14:31 260

原创 C++ 函数指针、指针函数、回调函数的概念

用于存储和调用函数地址。

2025-07-11 09:11:05 304

原创 C++ 右值引用 (Rvalue References)

右值引用是C++11引入的革命性特性,它彻底改变了C++中资源管理和参数传递的方式。下面我将从多个维度深入讲解右值引用。

2025-07-10 16:20:15 263

原创 C++ struct 和 class 区别

特性structclass默认成员访问publicprivate默认继承方式publicprivate典型用途数据聚合封装和复杂逻辑根据代码语义选择:如果需要数据透明或简单聚合,优先用struct。如果需要隐藏实现细节,优先用class。

2025-07-10 10:25:49 227

原创 QT 线程创建方式比较

在 QT 中创建线程主要有三种方式,各有优缺点和适用场景。下面我将详细比较这些方法。

2025-07-09 20:19:42 406

原创 QT 内存管理深度解析

T 框架在 C++ 的基础上提供了更高级的内存管理机制,帮助开发者减少手动管理内存的负担,同时避免常见的内存泄漏、野指针等问题。以下是 QT 内存管理的核心机制和最佳实践。QT 的 及其派生类(如 、 等)采用对象树机制自动管理内存:父对象析构时,自动删除所有子对象(递归删除)。通过 或在构造函数中指定父对象建立关系。适用于 GUI 组件、信号槽对象等。优点:无需手动 子对象,减少内存泄漏风险。适用于 GUI 程序,窗口关闭时自动清理所有子控件。缺点:循环引用可能导致内存泄漏(如父子互相引用)。

2025-07-09 20:05:47 858

原创 2025下半年计划

通过《Rust for Qt Developers》教程对比学习(周末2小时)混合使用(CLion 调试 C++,Qt Creator 调试 QML)阅读6本跨界书籍(2本专业书+2本社科+2本心理学,每月1本)。完成1门高级课程(如AI/云计算/区块链,根据行业趋势选择)。发展1项非工作技能(如摄影/乐器,每周2小时练习)。:主导Qt6迁移,输出《性能优化对比报告》(Q3):每周1次如:C++内存管理/Qt信号槽高频题训练。:量化项目成果(如"降低UI卡顿率30%")每月分析1个Qt核心模块源码(如。

2025-07-09 15:13:10 241

原创 C++ 内存分布。 什么数据在栈区,什么数据在堆区

(通常几MB,Linux 默认 8MB,Windows 默认 1MB)。| 堆(Heap) | ← 动态分配(向上增长)| 栈(Stack) | ← 高地址(向下增长):由编译器自动分配和释放(函数调用时入栈,返回时出栈)。(未初始化的全局变量、静态变量,程序启动时自动清零)。| 代码区(Text Segment)| ← 低地址。| 常量区(.rodata) || .data(初始化数据) || .bss(未初始化数据)|

2025-07-09 13:47:51 519

原创 new/delete 和 malloc/free 的实现细节

程序员通常无需关心虚拟内存到物理内存的映射细节,除非开发底层系统(如OS内核)。操作系统捕获中断后,从物理内存中分配一页(或从交换空间加载),并更新页表。返回的内存时,CPU发现虚拟页未映射到物理页,触发缺页中断。的惰性分配减少了不必要的物理内存占用,但首次访问可能有延迟。先调用对象的析构函数(释放资源,如文件句柄、动态内存等)。是C++的内置函数,负责分配原始内存(底层通常调用。在分配的内存上调用对象的构造函数(初始化成员变量)。计算对象所需的内存大小(包括可能的对齐填充)。(如分配大小、对齐信息等)。

2025-07-09 09:17:59 303

原创 Qt 事件处理机制

public:// 自定义数据成员...// 发送事件// 处理事件...Qt 事件处理系统的关键点:基于QEvent类层次结构表示所有事件通过和QEventLoop管理事件循环平台特定的事件分发器抽象灵活的事件过滤机制支持同步发送和异步投递两种事件传递方式每个线程可以有独立的事件循环提供完善的自定义事件支持这种设计使 Qt 能够高效处理各种类型的事件,同时保持跨平台的一致性和灵活性。

2025-07-08 19:54:01 259

原创 代码分析 // qobjectdefs.h

代码分析这段代码是 Qt 框架中著名的Q_OBJECT宏定义,它是 Qt 元对象系统(Meta-Object System)的核心。

2025-07-08 19:43:32 333

原创 Qt 元对象系统(Meta-Object System)

Qt 的元对象系统通过以下方式工作:moc 预处理器在编译时分析类声明生成包含元数据的 C++ 代码运行时通过索引和跳表快速访问元信息提供反射、信号/槽、属性等高级特性这种设计在保持 C++ 性能的同时,提供了类似动态语言的灵活性,是 Qt 框架强大功能的基础。

2025-07-08 19:31:10 276

原创 QT connect实现原理源码分析

QT connect的实现依赖于元对象系统,通过预处理生成元信息,运行时动态查找和调用。其核心在于:moc预处理的元信息QMetaObject存储的类信息连接列表管理信号槽关系多种连接类型的灵活处理这种设计既保持了灵活性(支持动态连接),又通过预处理和优化保证了较好的性能。

2025-07-08 17:54:59 539

原创 除了多态和继承还有什么面向对象方法

App(Logger* logger) : logger(logger) {} // 依赖注入。void deposit(double amount) { // 提供受控的访问方式。// Car "has-a" Engine(组合):将数据(成员变量)和操作数据的方法(成员函数)绑定在一起,并通过访问控制(void draw() override { // 必须实现。:适配器模式(Adapter)、装饰器模式(Decorator)。:观察者模式(Observer)、策略模式(Strategy)。

2025-07-08 16:48:31 519

原创 C++多态原理

多态是C++面向对象编程的核心特性,它允许通过统一的接口操作不同类型的对象。下面我将从底层机制到实际应用全面讲解C++多态的实现原理。

2025-07-07 15:12:30 864

原创 Qt6.5 QML实现圆角控件及子控件裁剪的两种方法

使用 MultiEffect 和 ShaderEffectSource 组合使用,达到子控件圆角自动裁剪效果。,这是一个兼容性模块,允许开发者继续使用Qt5中的图形效果。在id为root中的子控件如果超出会自动裁剪。在main.qml中调用做测试代码。

2025-07-04 14:51:08 98

原创 人生感悟——人是情绪类动物

人因情绪而鲜活,也因情绪而脆弱。

2025-07-03 11:44:57 231

原创 C++ 多线程条件变量篇

但是操作操作(1)由于second third线程已进入等待转态,需要外部通知唤醒,必须使用cv.notify_all()唤醒多个等待线程或者cv.notify_one()只唤醒一个等待线程(通常 只有一个线程在等到时)。cv.wait(lock, ...) 必须接收 unique_lock,因为它在等待时会临时解锁,唤醒后重新加锁。unique_lock支持手动unlock()和lock(),而lock_guard不允许手动控制锁,因此无法满足 wait 的解锁需求。再次检查条件(避免虚假唤醒)。

2025-07-03 11:23:35 267

原创 QML等比例缩放实现(控件 、文字大小、软件布局等比例缩放)

具体实现方式是 window下写一个Rectangle,其余所有控件都在此Rectangle控件内写。此Rectangle内写,然后就可实现。最近在实现QT qml的等比例缩放问题,试了很多种方法,找到了一种无需再做布局管理,直接就能行的方法,希望能帮到各位。

2024-10-31 11:34:40 809 2

原创 面向对象的三大特性和特征

特性:权限继承(public, protect, private);基类在子类的最高权限;怎么破坏继承(friend,using,)特性:访问权限(public, protect, private);静态多态,函数重载;动态多态,虚函数重写;目的:一个接口,多种形态,通过接口重用,增强可拓展性。目的:无需修改原有累的情况下通过继承实现对功能的拓展。目的:隐藏实现细节,实现模块化。

2024-10-28 19:57:20 156

原创 new delete和malloc free的区别

malloc分配空间的时候,申请的空间是16(16个字节,包含申请内存空间的大小)+mem,返回的是mem首地址,当要释放空间的时候,会左偏16位,得到所需释放空间的大小。3、new返回的是对象类型的指针,malloc返回的是void*,之后进行类型转换;1、new delete是C++的操作符,malloc free是C中的库函数。,它只是分配虚拟内存,创建对应的页表,但是没有在页表项中填写物理页的页号;6、delete需要对象内存的指针,free是void*类型的指针。delete的操作实现。

2024-10-28 09:03:34 224

原创 智能指针面试题

尽量使用make_shared来构造智能指针,不要通过get来操作裸指针,不要用一个指针构造多个智能指针对象)。多个对象通过share_ptr互相引用造成引用计数永远不为0,通过week_ptr解决,在循环引用的一方使用week_ptr来打破循环引用。智能指针怎么解决的:智能指针采用了RAII思想来自动化管理指针所指向的动态资源的释放,RAII主要利用了对象生命周期来控制程序资源,智能指针利用类的构造函数和析构函数来管理资源。智能指针的种类:shared_ptr、week_ptr、unique_ptr。

2024-10-24 21:08:34 334

原创 线程和进程的区别

2、资源开销:每个进程都有独立的代码和数据空间(程序上下文),进程之间切换开销比较大;同一进程内的线程共享此进程的代码和数据空间,只拥有自己独立的运行栈和程序计数器(PC),线程之间切换的开销较小。多进程比多线程要健壮。使用场景:对资源的管理和保护要求高,不限制开销和效率时,使用多进程。4、内存分配:同一进程中的线程共享此进程的内存空间和资源;1、本质区别:进程是操作系统资源分配的基本单位,线程是cpu任务调度和执行的基本单位。3、包含关系:线程是进程的一部分,同一进程可以包含一个或多个进程。

2024-10-24 10:54:03 400

原创 Ubuntu使用mysql -u root -p命令时报错ERROR 1698 (28000): Access denied for user ‘root‘@‘localhost‘解决方法。

问题描述:使用mysql -u root -p命令时报错ERROR 1698 (28000): Access denied for user 'root'@'localhost'现在就可以使用 root 用户和新密码登录 MySQL 了。试了很多种方法,最后的解决方法。

2024-08-20 09:26:13 429 1

原创 CMake学习笔记

本人主要从事QT开发工作,目前由于版本升级,为适应新版本开发,学习CMake。本人刚学不久,后面会好好研究。

2024-08-16 18:24:46 219

空空如也

空空如也

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

TA关注的人

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