- 博客(876)
- 资源 (20)
- 收藏
- 关注

原创 C++ Qt零基础入门进阶与企业级项目实战教程与学习方法分享
介绍Qt环境搭建、QtCreator / VS2019的基本使用方法,Qt整体架构、Qt信号机制,Qt内存管理等知识。
2023-09-21 23:00:33
4621
原创 python装饰器
类装饰器可以灵活地修改类的行为,适用于需要在类定义时进行修改的场景。通过类装饰器,开发者可以轻松地扩展类的功能,而无需直接修改类的代码。
2025-04-18 09:18:54
311
原创 C++ SFINAE
SFINAE是C++模板编程中的一个重要概念,全称是"Substitution Failure Is Not An Error"(替换失败不是错误)。它允许我们在编译期间基于类型特性选择正确的函数重载或模板特化。
2025-03-30 00:30:00
372
原创 C++萃取
萃取是一种用于从类型中"萃取"(提取)信息的技术,通常通过模板特化实现。获取类型的特性根据类型选择不同的算法为不同类型提供统一的接口// 迭代器萃取示例// 使用Iterator自身定义的类型// 为原生指针特化的萃取// 基于萃取的泛型函数// 使用萃取获取迭代器的值类型std::cout << "处理的元素类型大小: " << sizeof(value_type) << " 字节" << std::endl;// 使用迭代器处理元素...for (
2025-03-30 00:15:00
376
原创 Java反射用法介绍
Java 反射(Reflection)是 Java 语言的一个强大特性,它允许程序在运行时获取类的信息,检查和操作类的字段、方法、构造器等,甚至可以创建新的对象实例、调用方法和访问或修改字段值。
2025-03-29 09:08:31
298
原创 Android Zygote和System进程的启动过程
Zygote进程:负责孵化应用程序进程,通过预加载类和资源提高应用启动速度。System进程:负责启动和管理Android系统的核心服务,确保系统的正常运行。这两个进程的启动是Android系统启动的重要组成部分,确保了应用程序和系统服务的顺利运行。理解这两个进程的启动过程对于深入理解Android系统的工作机制是非常重要的。
2025-03-29 09:01:54
492
原创 Android logcat使用介绍
Android Logcat 是一个用于查看和分析 Android 应用程序日志输出的工具。它可以帮助开发者调试应用程序,跟踪错误和性能问题。Logcat 提供了一个命令行接口,可以在 Android Studio 中通过 Logcat 面板查看日志。
2025-03-29 08:57:47
575
原创 OpenGL MVP变换
在OpenGL中,(Model-View-Projection Transformation)是3D图形渲染的核心流程,它将物体的局部坐标通过一系列矩阵变换最终映射到屏幕空间。。
2025-03-24 11:17:50
757
原创 Android HAL服务注册与获取服务
在Android HAL(硬件抽象层)开发中,当使用HIDL(硬件接口定义语言)定义接口时,生成的C++头文件会包含一个关键的函数。该函数的作用是将HAL实现注册到系统服务管理器,使其他进程能够发现并调用该服务。用于将HAL接口的实现实例注册到Android的(HIDL服务管理器)。注册后,客户端(如Android框架或应用)可通过服务名称查找并绑定该服务。默认注册的服务名称为接口的(如"default"或"slot0"也可以通过参数指定自定义名称(例如。
2025-03-21 09:35:05
1053
原创 C++ fallthrough
C++ 中的是一个用来明确表示switch语句中的标签之间的执行流会“掉入”下一个case标签的机制。在传统的switch语句中,如果没有break语句,程序会继续执行下一个case代码块的内容,这种行为称为“fallthrough”(掉入)。不过,这种行为容易导致错误,因为编译器不会给出明确的提示,通常会误导开发者。为了解决这个问题,C++17 引入了一个新的属性,它显式地告诉编译器和其他开发者:当前case语句的执行流会跳到下一个case,即“fallthrough”是有意为之,而不是一个错误。
2025-03-14 15:41:35
352
原创 C++ std::atomic_long compare_exchange_strong用法介绍
是其一个成员函数,用于实现一种无锁的原子比较和交换操作。以下是一个简单的代码示例,展示如何使用。是 C++ 标准库提供的原子类型,
2025-03-10 15:46:46
668
原创 OpenGL纹理数组
在 OpenGL 中,是一种特殊的纹理类型,它允许我们将多个纹理存储在一个纹理对象中,并通过索引访问不同的纹理层。纹理数组的主要优势是可以减少绑定纹理的操作,从而提高性能,尤其是在需要频繁切换纹理的场景中。以下是实现步骤以及完整代码示例,使用和。
2025-03-05 07:45:00
352
原创 OpenGL 3D纹理
3D纹理(也称为体积纹理)是纹理映射的扩展,从2D平面扩展到3D空间。与2D纹理不同,3D纹理在三个维度上存储数据(宽度、高度和深度),允许在整个3D空间中采样,而不仅仅是在平面上。这个示例提供了一个坚实的3D纹理基础,可以根据特定需求进一步扩展和优化。例如,可以实现更复杂的体积渲染算法、添加光线行进技术或创建更复杂的程序化3D纹理。
2025-03-04 11:21:30
1005
原创 C++ OpenGL 表面剔除 (Face Culling)
表面剔除是一种优化技术,可以减少渲染不必要的图元,提高渲染性能。它基于一个简单原则:对于封闭的3D物体,观察者在任何时候最多只能看到一半的面(除非是透明物体)。通过剔除背向观察者的面,可以节省大量的片段着色器计算。:通过顶点的环绕顺序定义面的正面和背面:可以选择剔除正面、背面或两者。
2025-03-04 11:08:49
820
原创 C++ OpenGL 帧缓冲(Framebuffer)理论与实现
这个示例仅展示了基本用法,帧缓冲在实际应用中通常会结合更复杂的着色器和多重缓冲技术。在实际开发中需要根据具体的渲染需求调整帧缓冲的配置和附件类型。帧缓冲对象(FBO)是OpenGL中一种允许我们创建自定义渲染目标的对象。
2025-03-04 11:05:20
989
原创 android::IPCThreadState::self使用介绍
是 Android Binder IPC(Inter-Process Communication,进程间通信)机制中一个非常重要的函数。它主要用于管理当前线程与 Binder 驱动之间的交互状态。Binder 是 Android 中的核心 IPC 机制,而是负责管理线程级别的 Binder 状态的关键类。transactreplytransact以下是一些常见的场景和代码片段,展示了。
2025-03-03 08:15:00
1230
原创 android .rc文件
在 Android 系统中, 文件主要是 init 脚本,用于定义和配置 Android 系统的启动过程。 文件的扩展名通常为 ,例如 、、 等。这些文件是 Android 的 进程(系统的第一个用户态进程)读取和解析的脚本,它们控制系统服务、设备驱动程序、属性初始化等内容。 文件的主要用途可以总结为以下几点:启动服务:挂载文件系统:设置系统属性:权限管理:加载驱动程序:事件触发:一个 文件通常由以下几部分组成:命令部分:服务定义部分:触发器部分:使用 设置系统属性。2. 挂载文件系统使用 挂载
2025-03-03 08:00:00
561
原创 android bp构建编译C++代码
等模块类型,可以轻松地构建动态库、静态库和可执行文件。合理地组织项目结构和配置 BP 文件,可以让构建流程更加高效和清晰。文件的作用是定义如何编译、链接和打包项目中的组件,例如库(静态库、动态库)、可执行文件、AIDL 文件、资源等。(简称 BP)是一种基于 JSON 的构建配置文件格式,代替了传统的。,它是 Android 的 Soong 构建系统所使用的配置文件格式。以下是一个完整的项目示例,展示了如何使用 BP 文件定义模块。指定模块所依赖的共享库。指定模块所依赖的静态库。模块的名称,必须唯一。
2025-03-02 04:15:00
588
原创 android::hardware::configureRpcThreadpool使用介绍
的主要作用是设置服务的线程池,以便高效处理客户端请求。通常和配合使用,会启动线程池并阻塞当前线程,直到服务终止。合理配置maxThreads和参数,可以根据服务的需求优化性能。
2025-03-01 23:59:27
683
原创 Android Binder 用法详解
创建文件// 接口标识符enum {// 接口定义public:// 声明接口元信息// 纯虚函数,需要子类实现// 服务端接口public:// onTransact 函数处理来自客户端的请求完整的 IPC 框架:支持跨进程方法调用类型安全:通过接口定义保证类型安全高性能:直接在 native 层实现,避免了 JNI 开销安全性:支持身份验证和访问控制。
2025-03-01 00:17:58
1456
原创 TCP长连接与短连接
心跳机制是维持TCP长连接的关键技术,用于检测连接是否仍然有效,防止空闲连接被网络设备(如防火墙、路由器)关闭。心跳机制虽增加了少量网络开销,但在保持长连接稳定性方面发挥着重要作用,是长连接技术的基础保障。短连接是指客户端与服务器完成一次数据交换后就断开连接。下次需要通信时,再重新建立连接。在实际应用中,应根据具体业务需求、服务器承载能力和用户体验需求来选择合适的连接方式。长连接是指在一次TCP连接建立后保持连接状态,多次数据交换都复用这个连接。
2025-03-01 00:06:54
428
原创 C++内部类用法介绍
是在另一个类的作用域内定义的类。它的主要作用是封装逻辑关系紧密的类,使其不能被外部直接访问,从而增强封装性和代码的可读性。内部类不能直接访问外部类的成员,但可以通过外部类对象的引用或指针来访问。内部类是 C++ 代码组织的重要手段,使用得当可以提高代码的。如果内部类需要直接访问外部类的私有成员,可以将其声明为。,这决定了外部类和外部代码对其访问的权限。内部类可以用来封装某些结构或节点,例如。的内部类,实现了自定义迭代器的功能。的友元类,所以它可以直接访问。内部类不能直接访问外部类的非。
2025-02-28 17:12:24
75
原创 android智能指针android::sp使用介绍
是 Android 中的智能指针(Smart Pointer)的实现,用于管理对象的生命周期,避免手动管理内存泄漏等问题。是引用计数智能指针。它会在对象的引用计数变为零时自动释放对象。此外,Android 还提供了。在 Android 的 HAL(硬件抽象层)和 Binder 通信中非常广泛。的核心是对目标对象的引用计数进行管理。库中重要的一部分,常用于管理继承自。(弱指针),用于解决循环引用的问题。以下是一个完整的例子,演示如何使用。如果你需要避免循环引用,可以使用。提供了引用计数的功能。
2025-02-28 15:00:00
553
原创 C++ Qt常见面试题(10):Qt D指针(d_ptr)与Q指针(q_ptr)
Pimpl模式是一种常见的编程技巧,它通过将类的私有数据和实现放入一个独立的类中,从而避免了类实现的改变影响到类的用户代码。Pimpl模式通常会用到一个指针来指向这个独立的类。d_ptr和q_ptr是Qt用来实现Pimpl设计模式的工具,帮助Qt实现类的封装性、二进制兼容性和优化编译性能。通过在Qt类中使用d_ptr和q_ptr,可以将类的接口与实现分离,使得外部代码不需要关心类的实现细节。这种设计方式通常用于大型项目中,尤其是在Qt的库中广泛使用,可以避免因为实现变动导致的二进制不兼容问题。
2025-02-28 09:00:00
97
原创 C++ Qt常见面试题(9):TCP粘包问题以及解决办法
可以确保接收端能够正确区分并处理完整的消息,避免粘包问题。这样即使多个消息被TCP合并到一个包中,接收端也能够根据长度字段正确地解析出每个完整的消息。如果发送方连续发送多个数据包,而接收方在接收时没有办法区分每个数据包的边界,可能会发生粘包现象。:Nagle算法会尽量减少发送小的数据包,如果发送的数据非常小,TCP可能会把多个小数据包合并成一个大的数据包发送。:操作系统的内核会进行一定的缓存处理,以优化网络传输,可能会合并多个小包,造成粘包现象。,通过定义明确的包结构,使得每个包都能够被正确识别和解析。
2025-02-28 08:00:00
135
原创 C++ Qt常见面试题(8):C++ Qt中的线程同步与互斥
和QMutex的组合非常适合实现生产者-消费者模型,或任何需要线程等待某些条件满足的场景。QMutex用于保护共享资源的访问,而用于在资源条件不满足时让线程等待,并在条件满足时唤醒等待的线程。
2025-02-28 00:00:00
124
原创 C++ Qt常见面试题(7):QPainter的基本用法
QPainter是 Qt 中功能强大的 2D 图形绘制工具,适用于各种绘图需求。通过对画笔、画刷、字体和坐标变换的灵活控制,开发者可以轻松绘制各种图形元素。上绘制各种图形内容(如直线、矩形、文字、图片等)。它是 Qt 的 2D 图形绘制的核心工具,广泛用于自定义控件、绘制背景、图形编辑器等场景。支持坐标变换(平移、旋转、缩放),可以对绘图进行复杂的几何变换。的基本用法和高级功能,可以满足大多数 2D 绘图需求。是常见的内存绘图设备,可以将绘制结果保存为图片文件。是 Qt 提供的一个强大的绘图类,用于在。
2025-02-27 09:00:00
74
原创 C++ Qt常见面试题(6):QThread 和 QtConcurrent 之间有何区别
QThread 和 QtConcurrent是Qt中两种用于实现多线程编程的工具,它们设计目标和适用场景不同。以下是它们的详细对比和使用说明。通过将对象移动到线程中运行逻辑,适合需要运行事件循环的场景。用于运行普通函数或任务,返回一个。用于并行处理容器中的数据。方法来定义线程的逻辑。对象以监控任务状态。
2025-02-27 08:30:00
90
原创 C++ Qt常见面试题(5):Qt信号槽与C++函数指针的区别
都是用于实现程序中函数调用或消息传递的机制。然而,它们的设计目标、使用场景、功能和灵活性有很大的区别。以下是它们的详细比较及代码示例。以下示例展示了如何使用 Qt 信号与槽和 C++ 函数指针分别实现按钮点击回调。以下是一个 Qt 信号与槽的简单示例,展示如何在按钮点击时触发槽函数。以下是一个使用函数指针实现类似信号槽机制的示例。
2025-02-27 08:00:00
186
原创 C++ Qt常见面试题(4):Qt事件过滤器
Qt 的事件过滤器是一种强大的机制,适用于需要拦截和处理对象事件的场景。通过自定义事件过滤器并将其安装到目标对象或全局应用程序上,可以实现灵活的事件处理逻辑。在使用时,应注意合理设计过滤器逻辑,避免性能问题或不必要的事件拦截。)提供了一种机制,可以拦截并处理对象的事件(如鼠标事件、键盘事件等),在事件到达目标对象之前对其进行预处理。以下代码实现了一个简单的事件过滤器,用于拦截按钮的鼠标点击事件,并在点击时输出相关信息。在 Qt 中,事件过滤器(
2025-02-26 21:26:09
219
原创 C++ Qt常见面试题(3):Qt内存管理机制
Qt 内存管理机制是其框架的重要组成部分,目的是简化开发者对内存的管理,减少内存泄漏的风险,同时提供高效的资源使用方式。实现了一种自动化的内存管理方式,极大地减少了内存泄漏的风险。开发者只需负责顶层父对象的生命周期,其子对象会自动销毁。的设计,通过智能管理对象的生命周期来实现自动化的内存释放。以下是 Qt 内存管理机制的详细介绍。在开发中合理使用这些机制和工具,可以高效、安全地管理内存资源,避免常见的内存问题。从 Qt 5 开始,Qt 引入了智能指针来简化内存管理,特别是对非。Qt 的内存管理机制以。
2025-02-26 21:15:37
310
原创 C++ Qt常见面试题(2):QT中的文件流(QTextStream)和数据流(QDataStream)的区别
是两种常用的流类,用于通过文件或其他 I/O 设备(如网络、内存)读写数据。虽然它们都可以用来操作数据,但它们的设计目标和使用场景不同。根据实际应用场景选择合适的流工具,可以更高效地完成任务。
2025-02-26 21:12:23
283
原创 C++ Qt常见面试题(1):Qt信号槽的理解
C++ 中的 Qt 信号槽机制是 Qt 框架中用于实现组件间通信的核心机制之一。它是一种观察者模式的实现,提供了一种安全、灵活且松耦合的方式来连接对象和处理事件。下面从10个方面来介绍C++ Qt信号槽的原理及使用技巧。
2025-02-26 21:05:35
485
原创 C++ Qt OpenGL渲染FFmpeg解码后的视频
本篇博客介绍使用OpenGL渲染FFmpeg解码后的视频,涉及到QOpenGLWidget、QOpenGLFunctions、OpenGL shader以及纹理相关。
2025-02-26 20:28:18
963
原创 OpenGL Blinn-Phong 光照模型原理与基于物理的渲染 (PBR)
Blinn-Phong 光照模型是一种经典的基于物理的光照模型,用于模拟光源与物体表面之间的交互效果。Blinn-Phong 模型是现代图形学的重要基础,尽管已被更复杂的光照模型(如 PBR 的基于物理的渲染)所取代,但它在学习和理解光照的基本原理时仍然非常重要,同时也是许多实时渲染场景的经典选择。是一种更加真实的渲染技术,与传统的 Blinn-Phong 模型相比,它更接近现实中的光照和材质行为。PBR 的核心思想是通过物理规律模拟光与材质之间的交互,从而实现更真实、统一的视觉效果。
2025-02-25 09:12:56
859
C++ QMainWindow无边框窗口自定义标题栏可拖拽移动拉伸改变窗口大小
2024-04-23
Qt蓝牙串口源码支持十六进制发送、字符发送、定时发送
2022-02-22
c++ PImpl实现机制
2021-09-15
很全的 Qt qss
2020-09-29
jsoncpp_sdk_x64.rar
2020-04-06
支持向量机通俗导论(理解SVM的三层境界)PDF
2018-04-13
C# TCP网络通信示例:多人聊天发文件
2018-04-02
C++/OpenCV2.4.9 数字精确识别源码
2017-11-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人